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
要解决数组中的这个问题,你只需要定期查找,然后分别更新数组中的元素。