10

下面是一个示例文档。

    {
        "_id" : ...,
        "inprogress" : true,
        "name" : "Biz report",
 "inviteCode" : [
         {
                 "key" : "4fbd2b4b265a3",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265b5",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265b9",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265bc",
                 "status" : "1"
         },
         {
                 "key" : "4fbd2b4b265c0",
                 "status" : "1"
         }
 ]
    }

根据文档,我可以使用修饰符对象作为更新参数,但似乎更新参数不包括我想要更新的女巫字段的过滤器。我只能使用$set:{name:"xxx"}但我不能指定要在嵌套数组中更新哪个元素。如何设置密钥为“4fbd2b4b265a3”的邀请代码列的“状态”字段?

4

1 回答 1

13

您可以使用 $ 位置运算符:http ://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

在你的情况下:

db.collection.update( { inviteCode: { $elemMatch: { key: "4fbd2b4b265a3" } } },
    { $set: { 'inviteCode.$.status': '2' } } )

'$' 实际上是一个变量,其值设置为数组中第一个匹配项的索引。

于 2012-05-23T19:14:59.550 回答