Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose ODM findOneAndUpdate子文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose ODM findOneAndUpdate子文档

Node.js Mongoose ODM findOneAndUpdate子文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我目前有一个消息模式,该模式有一个子文档回复,如下所示: message: String, replies: [{ message: String, userFrom: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } }] 我正在尝试发出一个POST请求,该请求将允许我查找并重复邮件日期以附加回复。我尝试了以下几点: Message.findOneAndUpdate(req.params.i

我目前有一个消息模式,该模式有一个子文档回复,如下所示:

message: String,
replies: [{
   message: String,
   userFrom: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User'
   }
 }]
我正在尝试发出一个POST请求,该请求将允许我查找并重复邮件日期以附加回复。我尝试了以下几点:

Message.findOneAndUpdate(req.params.id,{
  replies: {
    message: req.body.reply,
    userFrom: req.user._id
  }
}, function(err, data){
  ...
});
发生的情况是,我正在覆盖回复数组中当前的任何回复。我相信我需要使用$push操作符,但我不太确定如何使用


是否可以在单个请求中使用findOneAndUpdate和$push?

您的方向是正确的。使用以下

query.findOneAndUpdate(id, update, callback) // executes
您可以使用操作员进行更新,如下所示:

var reply = {
    message: req.body.reply, 
    userFrom: req.user._id
};

Message.findOneAndUpdate(
    req.params.id,
    { $push: { replies: reply } },
    { upsert: true }, // upsert looks to find a Message with that id and if it doesn't exist creates the Message 
    function(err, data) {
        // Handle err
});