更新数组对象中的值

时间:2015-06-22 08:41:44

标签: arrays node.js mongodb mongoose

我正在尝试使用mongoose和nodejs更新mongodb模式数组中对象的值。

我的模特是:

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

我想更新"产品"数组"数量"价值过滤" productId"

2 个答案:

答案 0 :(得分:1)

尝试以下更新,该更新使用 $ positional operator 标识要更新的数组中的元素,而不显式指定数组中元素的位置。由于位置 $ 运算符充当与查询文档匹配的第一个元素的占位符,因此数组字段必须显示为查询文档的一部分,因此您需要products查询中的数组字段:

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

答案 1 :(得分:0)

您必须使用运算符$

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

<强> ALITER

也许你必须制作一个新对象

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

然后更新文档,

我个人认为第二种方法会更安全可靠。