0

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

{
  "_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)
4

1 回答 1

2

当您想匹配同一文档中的两个字段时,您需要使用$elemMatch运算符。

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

{ _id: 2, users : {$elemMatch : {x:2, y:2} } } 
于 2013-02-27T12:17:15.807 回答