更新mongoose中与条件匹配的数组

时间:2017-02-12 06:15:05

标签: node.js mongodb mongoose

我的架构看起来像

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

属性2是数组我要做的是更新那些在单个查询中启用为true的数组对象

我尝试编写以下查询

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

但它不起作用

错误:

  

[main]错误:不能有。在字段名称[qty.pro.size]

2 个答案:

答案 0 :(得分:3)

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

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

  1. 等号'='不能在对象内使用
  2. 使用$
  3. 更新数组

答案 1 :(得分:1)

假设您的文档看起来像这样。

{

   "_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"}})

其中第一个大括号表示查询条件,第二个大括号设置新值。