2017-02-12 53 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"}}) 

,其中第一大括號代表查詢條件和第二個設置了新的價值。