MongoDB - 增加不存在的嵌套文档数组

时间:2018-05-09 20:37:42

标签: arrays mongodb increment embedded-database documents

我有以下示例文档结构:

{
    "_id" : 1,
    "distributor" : "Jackson",
    "systems" : [
        {
            "name" : "XBOX",
            "quantity" : null,
        },
        {
            "name" : "PlayStation",
            "quantity" : 10,
        },
        {
            "name" : "Nintendo",
            "quantity" : 20,
        },
        {
            "name" : "Atari",
            "quantity" : null,
        },
    ],
    "games" : [
        {
            "name" : "Call of Duty",
            "quantity" : 5
        },
        {
            "name" : "Super Mario Bros",
            "quantity" : null,
        },
        {
            "name" : "Madden",
            "quantity" : 4,
    ],
    "comments" : null,
    "contact" : "Bill"
}

我想通过NOT NULL增加每个1嵌入文档的数量。到目前为止,我能够让它更新第一个找到的非空条目(在本例中为Playstation),但没有别的。

我希望的结果如下:

{
    "_id" : 1,
    "distributor" : "Jackson",
    "systems" : [
        {
            "name" : "XBOX",
            "quantity" : null,
        },
        {
            "name" : "{PlayStation}",
            "quantity" : 11,
        },
        {
            "name" : "Nintendo",
            "quantity" : 21,
        },
        {
            "name" : "Atari",
            "quantity" : null,
        },
    ],
    "games" : [
        {
            "name" : "Call of Duty",
            "quantity" : 6
        },
        {
            "name" : "Super Mario Bros",
            "quantity" : null,
        },
        {
            "name" : "Madden",
            "quantity" : 5,
    ],
    "comments" : null,
    "contact" : "Bill"
}

感谢任何指导!

1 个答案:

答案 0 :(得分:0)

如果您使用的是MongoDB 3.6或更高版本,则可以使用this

db.col.update(
   {_id: 1},
   { $inc: { "systems.$[elem].quantity": 1, "games.$[elem].quantity": 1 } },
   { arrayFilters: [ { "elem.quantity": { $ne: null } }  ] });

数组过滤器只是将您的条件应用于数组的每个元素,并在该特定元素匹配时执行更新。