2017-02-12 71 views
1

我的架构看起来像更新阵列相匹配的条件

{ 
    qty:{ 
     property1:{ 
      //something 
     } 
     property2:[{ 
      size:40, 
      color:"black", 
      enabled:"true" 
     }] 
    } 
} 

财产2是阵列我想要做的是更新的数组对象,其能在单个查询真实

我试着写下面的查询

db.col.update({ 
    "qty.property2.enabled" = "true" 
}, { 
    "qty.property2.color" = "green" 
}, callback) 

,但它不工作

错误:

[main] Error: can't have . in field names [qty.pro.size]

回答

2
db.col.update({"qty.property2.enabled":"true"},{$set: {'qty.property2.$.color': 'green'}}, {multi: true}) 

这是内部数组更新元素的方式。

  1. 等号 '=' 无法对象
  2. 更新阵列内完成使用$
1

假设你documet看起来像这样使用。

{ 

    "_id" : ObjectId("4f9808648859c65d"), 

    "array" : [ 

     {"text" : "foo", "value" : 11}, 

     {"text" : "foo", "value" : 22}, 

     {"text" : "foobar", "value" : 33} 

    ] 

} 

那么你的查询将被

db.foo.update({"array.value" : 22}, {"$set" : {"array.$.text" : "blah"}}) 

,其中第一大括号代表查询条件和第二个设置了新的价值。