MongoDB:如何更新数组中的单个子元素,由数组中的索引引用?
我试图更新MongoDB文档中的数组中包含的单个子元素。 我想使用它的数组索引来引用这个字段(数组中的元素没有任何可以保证是唯一标识符的字段)。 似乎这应该很容易做到,但我无法弄清楚语法。
这是我想在伪json中做的事情。
之前:
{ _id : ..., other_stuff ... , my_array : [ { ... old content A ... }, { ... old content B ... }, { ... old content C ... } ] }
后:
{ _id : ..., other_stuff ... , my_array : [ { ... old content A ... }, { ... NEW content B ... }, { ... old content C ... } ] }
看起来像查询应该是这样的:
//pseudocode db.my_collection.update( {_id: ObjectId(document_id), my_array.1 : 1 }, {my_array.$.content: NEW content B } )
但是这不起作用。 我花了太长时间searchmongodb文档,尝试对这个语法的不同变化(例如使用$slice
等)。 我找不到如何在MongoDB中完成这种更新的任何明确的解释。
正如所料,一旦你知道如何,查询很容易。 以下是Python中的语法:
db["my_collection"].update( { "_id": ObjectId(document_id) }, { "$set": { 'documents.'+str(doc_index)+'.content' : new_content_B}} )
更新Mongo Shell中的索引(例如1)引用的数组元素也可以通过直接指示索引值来完成:
db.my_collection.update( {_id : "document_id"}, {$set : {"my_array.1.content" : "New content B"}} )
在mongo风格中,使用'$'位置运算符。 查看这个链接的细节。
db.my_collection.update( {_id: ObjectId(document_id), my_array.1 : 1 }, { $set: { "my_array.$.content" : "NEW content B" } } )
db.my_collection.update( {_id: ObjectId(document_id), my_array : { ... old content A ... } }, { $set: { "my_array.$.content" : "NEW content B" } } )