Mongoose ODM findOneAndUpdate 子文档
Mongoose ODM findOneAndUpdate sub-document
我目前有一个 Message 模式,其中有一个回复的子文档:
message: String,
replies: [{
message: String,
userFrom: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}]
我正在尝试发出一个 POST 请求,该请求将允许我 findOneAndUpdate 消息以附加回复。我尝试了以下操作:
Message.findOneAndUpdate(req.params.id,{
replies: {
message: req.body.reply,
userFrom: req.user._id
}
}, function(err, data){
...
});
我正在覆盖回复数组中当前的任何回复。我相信我需要使用 $push 运算符,但我不太确定如何使用。
是否可以在单个请求中同时使用 findOneAndUpdate 和 $push?
你的方向是正确的。使用以下 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
});
我目前有一个 Message 模式,其中有一个回复的子文档:
message: String,
replies: [{
message: String,
userFrom: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}]
我正在尝试发出一个 POST 请求,该请求将允许我 findOneAndUpdate 消息以附加回复。我尝试了以下操作:
Message.findOneAndUpdate(req.params.id,{
replies: {
message: req.body.reply,
userFrom: req.user._id
}
}, function(err, data){
...
});
我正在覆盖回复数组中当前的任何回复。我相信我需要使用 $push 运算符,但我不太确定如何使用。
是否可以在单个请求中同时使用 findOneAndUpdate 和 $push?
你的方向是正确的。使用以下 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
});