更新阵列字段

时间:2014-05-01 22:13:51

标签: mongodb

我有一个文档结构,如下所示 让我们说像ORDERS.MAIN_ORDERS.P1这样的树结构;基本上创建了3个文档,显示每个节点的父项

{
    "_id" : ObjectId("5362a7fd300400ffbabc3754"),
    "categoryid" : "ORDERS",
    "ancestors" : [],
    "availableLocales" : [ 
        {
            "locale" : "en_US",
            "count" : 1
        }
    ],
    "rolledUpCount" : 1
}

{
    "_id" : ObjectId("5362a7fd300400ffbabc3755"),
    "categoryid" : "MAIN_ORDERS",
    "ancestors" : [ 
        "ORDERS"
    ],
    "availableLocales" : [ 
        {
            "locale" : "en_US",
            "count" : 1
        }
    ],
    "rolledUpCount" : 1
}

{
    "_id" : ObjectId("5362a7fd300400ffbabc3756"),
    "categoryid" : "P1",
    "ancestors" : [ 
        "ORDERS", 
        "MAIN_ORDERS"
    ],
    "availableLocales" : [ 
        {
            "locale" : "en_US",
            "count" : 1
        }
    ],
        "rolledUpCount" : 1
}

当一棵新树进来时(e; g ORDERS.MAIN_ORDERS.P2)我需要为该特定区域设置增加该categoryid(P2)的所有父树的计数。我如何使用mongoQuery做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下内容进行更新:

db.mycollection.update(
    { "availableLocales.locale" : { "$in": ["en_US"] } },
    { "$inc" : { "availableLocales.count" : 1 } }
})

此更新使用$in$inc运算符。

查找集合,其中availableLocales包含一个包含“en_US”值的区域设置的数组。

{ "availableLocales.locale" : { "$in": ["en_US"] } } 

将count字段的值增加1.请注意,您可以传递multi:true来更新所有匹配的文档,而不仅仅是一个。

{ "$inc" : { "availableLocales.count" : 1 } }

有关这些工作原理的更多信息,请参阅文档。

---更多信息:

更新ORDERS:

db.mycollection.update(
    { 
        "categoryid" : "ORDERS",
        "availableLocales.locale" : { "$in": ["en_US"] }
    },
    { "$inc" : { "availableLocales.count" : 1 } }
})

更新MAIN_ORDERS:

db.mycollection.update(
    { "categoryid" : "MAIN_ORDERS", "availableLocales.locale" : { "$in": ["en_US"] } },
    { "$inc" : { "availableLocales.count" : 1 } }
})

希望这能进一步澄清事情。它应该指向正确的方向!