addToSet用于数组中的数组

时间:2016-04-14 11:02:29

标签: mongodb mongodb-query

鉴于此示例文档:

> 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 ] } ]})

这样的更新是否可行?显然我可以将每个文档拉到客户端更新和替换,但这真的只是最后的手段。

1 个答案:

答案 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}})