Mongoose ODM findOneAndUpdate子文档

时间:2015-04-20 03:48:48

标签: node.js mongodb mongoose

我目前有消息架构,其中包含一份回复子文档:

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?

1 个答案:

答案 0 :(得分:6)

你的方向正确。使用以下 syntax

query.findOneAndUpdate(id, update, callback) // executes

您可以使用$push运算符进行更新,如下所示:

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
});