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)

しかし、両方とも true でなければならない 2 つの要素レベル基準を指定するときに、これを行うことは可能ですか? (つまり、x と y)。私はこれまでに 1 つの例しか見たことがありませんが、うまく機能していないようです。多分このような何か?:

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

1 に答える 1

2

同じドキュメント内の 2 つのフィールドを照合する場合は、 $elemMatch演算子を使用する必要があります。

クエリ (where) 述語は次のようになります。

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