2015-06-22 74 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} } 
)