2015-06-22 98 views
0

我正在嘗試使用mongoose和nodejs更新我的mongodb模式數組中對象的值。更新數組對象的值

我的模式是:

{ 
"_id": ObjectId("557eecd687cff9281040efe5"), 
"products": [ 
    { 
     "productId": "6849500", 
     "qty": 2, 
     "_id": ObjectId("557eef13101aef4c101af513") 
    } 
] 
} 

我想上「的productId」

+0

提示:由於位置$運營商充當了查詢文檔相匹配的第一個元素的佔位符,數組字段必須因此你需要在你的查詢products陣列領域出現查詢文檔的一部分:'{$ set:{'products。$。qty':'qty_value'} .' –

回答

0

你將不得不使用操作$更新的「產品」陣列「數量」值濾波。

ModelName.update({ 
    //find the document 
},{ 
    products.$.qty : //value 
}); 

ALITER

也許你將不得不作出一個新的對象

{ 
    "productId": "6849500", 
    "qty": //some new value, 
    "_id": ObjectId("557eef13101aef4c101af513") 
} 

,然後更新文件,

我個人認爲,第二種方法會更安然無恙。

+0

好的。我猜嵌套'$'不支持。謝謝,我會更新我的答案! – MegaMind

1

請嘗試執行以下更新,它使用來標識數組中要更新的元素,而不顯式指定數組中元素的位置。

db.collection.update(
    {"products._id": ObjectId("557eef13101aef4c101af513")}, 
    {"$set": {"products.$.qty": 8} } 
)