鉴于此示例文档:
> db.sample.find().pretty()
{
"_id" : ObjectId("570f76ca4fe66c8ae29f13cd"),
"a" : [
{
"b" : [
1,
2,
3
]
},
{
"b" : [
1,
2,
3,
4
]
},
{
"b" : [
4
]
}
]
}
我正在尝试为b
数组中的每个实例添加数字4到a
数组
我原本希望
db.sample.update({},{$addToSet:{"a.b":4}})
可以解决问题,但这会产生错误:
cannot use the part (a of a.b) to traverse the element ({a: [ { b: [ 1.0, 2.0, 3.0 ] }, { b: [ 1.0, 2.0, 3.0, 4.0 ] }, { b: [ 4.0 ] } ]})
这样的更新是否可行?显然我可以将每个文档拉到客户端更新和替换,但这真的只是最后的手段。
答案 0 :(得分:1)
看起来直到实现SERVER-1243 Jira,您必须逐个为数组中的每个项目执行此操作,例如:
db.sample.update({},{$addToSet:{"a.0.b":4}})
db.sample.update({},{$addToSet:{"a.1.b":4}})
如果您只需要更新您可以使用的第一个元素:
db.sample.update({},{$addToSet:{"a.$.b":4}})