MongoDB:如何通过数组中的索引更新单个子元素?
MongoDB:如何通过数组中的索引更新单个子元素?
我正在尝试更新mongodb文档中包含在数组中的单个子元素。我想使用数组索引引用字段(数组中的元素没有任何可以保证是唯一标识符的字段)。看起来应该很容易做到,但我无法找出语法。\n以下是我想在伪json中做的事情。\n在更新前:\n
{ _id : ..., other_stuff ... , my_array : [ { ... 旧内容A ... }, { ... 旧内容B ... }, { ... 旧内容C ... } ] }
\n更新后:\n
{ _id : ..., other_stuff ... , my_array : [ { ... 旧内容A ... }, { ... 新内容B ... }, { ... 旧内容C ... } ] }
\n查询应该是这样的:\n
//伪代码 db.my_collection.update( {_id: ObjectId(document_id), my_array.1 : 1 }, {my_array.$.content: 新内容B } )
\n但是这行不通。我已经花了很长时间搜索mongodb文档,并尝试不同的变体(例如使用$slice
等)的语法。我找不到任何清晰的解释如何在MongoDB中完成这种更新。
在MongoDB中,如果我们想要更新数组中的一个子元素,可以使用'$'位置操作符。下面是一个使用该操作符的示例代码:
db.my_collection.update( {_id: ObjectId(document_id), my_array.1 : 1 }, { $set: { "my_array.$.content" : "NEW content B" } } )
该代码中,我们通过指定`_id`和`my_array.1`来定位到数组中需要更新的子元素。然后,我们使用`$set`操作符来更新该子元素的内容为"NEW content B"。
要详细了解'$'位置操作符的用法,可以查看[这个链接](http://docs.mongodb.org/manual/reference/operator/update/positional/?_ga=1.12567092.1864968360.1429722620#up._S_)。
通过使用'$'位置操作符,我们可以方便地在MongoDB中更新数组中的子元素。
我们在Mongo Shell中可以通过直接指定索引值来更新数组中的元素。例如,如果我们知道要更新的元素的索引是1,可以使用以下代码:
db.my_collection.update( {_id : "document_id"}, {$set : {"my_array.1.content" : "New content B"}} )
但是,如果我们不知道要更新的元素的索引怎么办呢?在这种情况下,我们可以使用$elemMatch运算符来查找满足特定条件的元素,并更新该元素的值。
下面是一个示例代码,演示了如何使用$elemMatch来更新数组中的单个子元素:
db.my_collection.update( {_id: "document_id", my_array: {$elemMatch: {content: "Old content"}}}, {$set: {"my_array.$.content": "New content"}} )
在上述代码中,我们使用$elemMatch运算符来查找具有特定内容的元素。然后,我们使用$符号来引用匹配的元素,并更新其内容。
在MongoDB中,要更新数组中的单个子元素,我们可以通过直接指定索引值或使用$elemMatch运算符来查找和更新满足特定条件的元素。通过这两种方法,我们可以根据需要灵活地进行更新操作。