Node.js 如何根据嵌入文档的id更新该文档?
我有一个需要更新的嵌入式文档。我在考虑如何更新给定id的文档时遇到问题。以下是我到目前为止得到的,但它不起作用:Node.js 如何根据嵌入文档的id更新该文档?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个需要更新的嵌入式文档。我在考虑如何更新给定id的文档时遇到问题。以下是我到目前为止得到的,但它不起作用: var Post = require('../models/post'); var comment_id = 5394f5be2f6953083908db47; var updateData = { comment: req.body.comment, title: req.body.title }; Post.update({ comments : { _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。但基本上,这是一个单数的\u id
值,不能出现多次,因此可以使用“点符号”来处理所需字段。然后需要一个操作符来引用在更新端匹配的字段的索引
此外,还需要运算符,否则“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});
}
);
虽然您没有在这里使用它,但的回调的第二个参数是受语句影响的文档数,而不是实际的文档或数据。要将文档取回,请查看MongooseAPI文档中的方法
此外,的官方MongoDB文档还显示了几种常见的使用案例。感谢您的帮助,但仍然存在一些问题。您建议使用
$set
,这样我的现有数据就不会被覆盖。但是,按照现在的方式,当我尝试更新时,未包含在updateData
对象中的所有字段都将从文档中删除。如何修改您的代码,使现有的“字段”不会被删除?@ChrisPaterson您是对的。我忙着指出我忘了纠正的其他部分。答案变了。基本上也是使用位置运算符的“点表示法”。