MongoDB:更新子文档

我有这个集合:

[{ "_id" : 7, "category" : "Festival", "comments" : [ { "_id" : ObjectId("4da4e7d1590295d4eb81c0c7"), "usr" : "Mila", "txt" : "This is a comment", "date" : "4/12/11" } ] }] 

我想要的只是插入一个新的领域里面这样的评论:

 [{ "_id" : 7, "category" : "Festival", "comments" : [ { "_id" : ObjectId("4da4e7d1590295d4eb81c0c7"), "usr" : "Mila", "txt" : "This is a comment", "date" : "4/12/11", "type": "abc" // find the parent doc with id=7 & insert this inside comments } ] }] 

我怎样才能插入评论子文档内?

您需要使用$位置运算符

例如:

 update({ _id: 7, "comments._id": ObjectId("4da4e7d1590295d4eb81c0c7") },{ $set: {"comments.$.type": abc} }, false, true ); 

我没有testing,但我希望这会对你有所帮助。

如果您想更改需要使用的文档结构

db.collection.update(criteria,objNew,upsert,multi)

参数:

 criteria - query which selects the record to update; objNew - updated object or $ operators (eg, $inc) which manipulate the object upsert - if this should be an "upsert"; that is, if the record does not exist, nsert it multi - if all documents matching criteria should be updated 

并以新的结构插入新的objNew。 检查这个更多细节

如果“注释”字段不是数组,则$位运算符只会按预期工作。 OP的JSON格式不正确,但看起来可能是一个数组。

现在的问题是,mongodb现在只会更新匹配查询的数组的第一个元素。 尽pipe有一个RFE可以添加对更新所有匹配的数组元素的支持: https : //jira.mongodb.org/browse/SERVER-1243

要解决数组中的这个问题,你只需要定期查找,然后分别更新数组中的元素。