将新对象推送到嵌套的mongodb文档中,其中子文档中的特定条件匹配

时间:2018-10-22 20:59:12

标签: node.js mongodb mongoose mongodb-query

我是Nodejs和Mongodb的新手。我正在我的项目中构建消息聊天功能。我已经完成了消息架构。

这是我的用户模型架构:

var UserSchema = new mongoose.Schema({

    name : {
       type     : String
    },
    email : {
       type : String
   },
   password : {
       type     : String
   },
   chats : [{
        chatId : String,
        messages : [{
            type  : mongoose.Schema.Types.ObjectId,
            ref   : 'Message'
        }]
    }]  
});

我想将所有新消息对象添加到匹配chatId的子文档中。因此,我可以轻松地在结构化的前端(Angular)上使用它
我已经尝试过了:

var msg = new Message({
    senderId : req.user._id,
    to       : toUser,
    from     : user,
    message  : req.body.msg,
    datetime : new Date()
})

msg.save();

const chatFr = await User.findOneAndUpdate(
        { 'chats.chatId' :  req.user._id },
        { $push : { 'chats' : msg  }}
)

它正在创建一个单独的对象。我不知道如何在此处的子文档中使用“ where”。我来自Sql背景。请帮助如何在mongodb / mongoose

的子文档中执行条件查询

1 个答案:

答案 0 :(得分:1)

尝试一下:

await User.findOneAndUpdate(
  { 'chats.chatId' :  req.user._id },
  { $addToSet: { 'chats.$.messages' : msg  }}}
)

您需要使用$ position operator进行插入。您还可以使用$addToSet