如何使用 Node js 中的新数组更新现有的 mongodb 数据库

问题描述 投票:0回答:1

我的 mongodb 数据看起来像这样

[{"_id":"66076517c835e00d55714b41","UMKC":{"users":{"professors":[],"students":[],"admins":[]}}}]
,{"_id":"66076517c835e00d55714b41","UNT":{"users":{"professors":[],"students":[],"admins":[]}}}]]

我想根据用户的角色更新用户。需要附加的数据看起来像这样

{
'fname':fname,
'lname':lname,
}

我尝试像这样更新它

router.post('/register', async (req, res) => {
    const { fname, lname, email, univName, id, role, password, _id } = req.body;
    const adminData = { fname, lname, email, id, password }
    const filter = { _id: new ObjectId(_id) }
   
    try {
        const updateResult = await Users.updateOne({filter},
            {$push:{
                'users.admins':{
                    'fname':fname,
                    'lname':lname,
                    'id':id,
                    'email':email,
                    'password':password
                }
            }}
            );console.log(updateResult)
    } catch (error) {
        console.log(error)
    }
})


我关注了 mongodb 网站中的一个帖子

用户模型看起来像这样

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    id: {
        type: Number,
        required: true,
        unique: true
    },
    fname: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 50
    },
    lname: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 50
    },

    email: {
        type: String,
        required: true,
        unique: true,
        validate: {
            validator: (email) => /^[\w-\.]+@([\w-]+\.)+[a-zA-Z]{2,4}$/.test(email),
            message: 'Please enter a valid email address.'
        }
    },
    password: {
        type: String,
        required: true,
        minlength: 8
    }
});

const Users = mongoose.model('Users', userSchema);

module.exports = Users; // Export the Users model directly

数据库中的数据未更新。我是不是做错了什么?

编辑:

我尝试像这样更改推送内的变量

'users.admins' to 'UNT.users.admins' also `[${univName].users.admins`

只是想看看它是否有效。但没有运气

node.js mongodb api mongoose mongoose-schema
1个回答
0
投票

假设您设置了正确的架构,以下是构建 updateOne 调用的方法:

router.post('/register', async (req, res) => {
    const { fname, lname, email, univName, id, role, password, _id } = req.body;
    const userData = { fname, lname, email, id, password };
    const filter = { _id: new ObjectId(_id) };
   
    let updatePath = `${univName}.users.${role}`;
    
    try {
        const updateResult = await Users.updateOne(filter, {
            $push: {
                [updatePath]: userData
            }
        });

        console.log(updateResult);
        res.send(updateResult);
    } catch (error) {
        console.error(error);
        res.status(500).send(error);
    }
});

首先,确保您的 Users 模型的架构反映了 MongoDB 文档的结构。您提供的架构与以大学为键且嵌套用户的文档结构不匹配。您需要一个可以处理动态键(大学)或重组数据库的架构。

© www.soinside.com 2019 - 2024. All rights reserved.