MongoDB使用带有多个元素标准的$ positional运算符?

时间:2013-02-27 11:34:02

标签: mongodb

鉴于此文档结构(对象数组):

{
  "_id" : "2",
  "users" : [{
      "_id" : "1",
      "x"   : "1",
      "y"   : "2",
      "name": "blah"
    }, {
      "_id" : "2",
      "x"   : "2",
      "y"   : "2",
      "name": "blah"
    }],
}

我知道我可以做这样的事情来替换数组中的特定文档:

coll.update( {'_id':'2', 'users._id':'2'}, {$set:{'users.$':{"name":"blahblah",... }}}, false, true)

但是在指定必须同时为真的两个元素级别标准时是否可以这样做?(即x和y)。我只见过一个例子,我似乎无法让它工作。也许这样的事情?:

coll.update( {'_id':'2', 'users.x':'2', 'users.y':'2'}, {$set:{'users.$':{"name":"blahblah",... }}}, false, true)

1 个答案:

答案 0 :(得分:2)

如果要匹配同一文档中的两个字段,则需要使用$elemMatch运算符。

您的查询(where)谓词将是:

{ _id: 2, users : {$elemMatch : {x:2, y:2} } }