我有一个需要更新的嵌入式文档。我无法弄清楚如何更新给定id的文档。这是我到目前为止所做的,但它不起作用:
var Post = require('../models/post');
var comment_id = 5394f5be2f6953083908db47;
var updateData = {
comment: req.body.comment,
title: req.body.title
};
Post.update({ comments : { _id : comment_id } }, updateData, function(err,data) {
return res.json({success: true});
});
var postCommentSchema = mongoose.Schema({
title : String,
comment : String,
user : String,
tags : [],
created : {
type: Date,
default: Date.now
}
});
var postSchema = mongoose.Schema({
post : String,
title : String,
created : {
type: Date,
default: Date.now
},
comments : [postCommentSchema]
});
module.exports = mongoose.model('Posts', postSchema);
答案 0 :(得分:1)
您的“comment_id”变量需要引用为有效的JavaScript。但基本上这是一个单数_id
值,不能出现多次,你可以使用“点符号”来解决所需的字段。然后,您需要一个positional $
运算符来引用您在更新端匹配的字段的索引。
此外,您需要$set
运算符,否则您的“updateData”对象将覆盖您引用的数组成员中的现有数据,即此处缺少的日期:
var comment_id = "5394f5be2f6953083908db47";
Post.update(
{ "comments._id" : comment_id } },
{ "$set": {
"comments.$.comment": req.body.comments,
"comments.$.title": req.body.title
} },
function(err,numAffected) {
return res.json({success: true});
}
);
虽然你没有在这里使用它,但.update()
回调的第二个参数是受语句影响的文档数,而不是实际的文档或数据。要将文档作为结果返回,请查看mongoose API文档中的.findOneAndUpdate()
等方法。
.update()
的官方MongoDB文档也显示了几种常见用例。