NodeJS MongoDB 添加到子文档数组

Posted

技术标签:

【中文标题】NodeJS MongoDB 添加到子文档数组【英文标题】:NodeJS MongoDB Add to Array of Subdocuments 【发布时间】:2021-06-17 08:11:32 【问题描述】:

所以我正在开发我的登录系统,使用 Mongo 作为我的后端。我希望能够在一个帐户上拥有多个用户,因此我正在开发一种处理此问题的路线。我有一个帐户模型和一个用户模式。这就是我当前尝试创建用户的方式:

router.post('/CreateUser', async(req, res) =>
    try

        const acc = await Account.findOne("Email": req.body.Email);
        if(!acc) throw Error('Email not found');
        var newUser = new User(req.body.User); 
        acc.Users.push(newUser);
        res.status(200).send(success:true);

    
    catch(err)
        res.status(400).send(msg:err.toString(),success:false);

    
);

这是我的用户架构:

const UserSchema = new Schema(
    // Name of the user
    Username:
        type:String,
        required:true,
        unique:true
    ,
    // PIN for each user
    PIN:
        type:Number,
        require:true
    

);

module.exports = UserSchema;

我的帐户模型:

const User = require('../Models/UserData');

const AccountSchema = new Schema(
    // Email linked to this account
    Email:
        type:String,
        unique:true,
        required:true,
        index:true
    ,
    // Password for the account
    Password:
        type : String,
        required : true
    ,
    // Users on this account
    Users:
        type:[User],
        required:true
    
);

module.exports = mongoose.model('Account', AccountSchema);

它返回success:true,但我在数据库中看到的唯一变化是一个完全为空的全新集合。我还需要检查用户名是否已经存在,但一步一步来。

编辑:这是我用于 POST 请求的正文:


    "Email":"Paul@test.com",
    "User":
    
        "Username":"56",
        "PIN":4659
    

【问题讨论】:

【参考方案1】:

如果您想将记录保存到用户模型以及调用user.save,请将更新的记录保存到数据库acc.save

router.post('/CreateUser', async(req, res) =>
    try

        const acc = await Account.findOne("Email": req.body.Email);
        if(!acc) throw Error('Email not found');
        var newUser = new User(req.body.User);
        acc.Users.push(newUser);
        const saveAccount = await acc.save(); // SAVE Account
        const saveUser = await newUser.save(); // SAVE User


    
    catch(err)
        res.status(400).send(msg:err.toString(),success:false);

    
);

【讨论】:

以上是关于NodeJS MongoDB 添加到子文档数组的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:如何将附加字段添加到子文档数组中

Mongoose:如何将附加字段添加到子文档数组中

python3之MongoDB

如何使用 NodeJS 将数据添加到 MongoDB 中的数组属性?

根据对象数组中不匹配的属性查找匹配的文档 - MongoDB

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据