我有一个嵌入式文档,需要更新。我在弄清楚如何更新给定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);
您必须将“ comment_id”变量加引号,以使其成为有效的JavaScript。但是基本上,因为这是一个奇异_id
值,因此不能多次出现,您可以使用“点符号”来寻址必填字段。然后,您需要一个位置$
运算符来引用您在更新端匹配的字段的索引。
另外,您还需要$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()
是受语句影响的文档数,而不是实际的文档或数据。要将结果归还给文档,请查看.findOneAndUpdate()
猫鼬API文档中的方法。
此外,官方的MongoDB文档还.update()
显示了几种常见的使用情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句