2

コレクション内のサブドキュメント配列の配列フィールドを更新しようとしています。私のコレクションは次のようになります。

{
 _id:"1",
 employees:[{ eid:"2",
              ename:"test",
              is_user:true
             },
             { eid:"3",
              ename:"test2",
              is_user:true
             }
           ]
}

is_userステータスを更新しようとしていますが、次の方法で試しています。

db.users.update({_id:"1","employees.eid":"2"},{$set:"employees.$.is_user":true},true);

私も試しました:

db.users.update({_id:"1","employees.$.eid":"2"},{$set:"employees.$.is_user":true},true);

しかし、検索を実行すると、クエリに対して次のようになります。

db.users.find({_id:"1","employees.eid":"2"});

それでも私には何も与えられません。誰かがこれについて私を助けることができますか?ありがとうございました..

4

1 に答える 1

5

それはうまくいきます。

> db.test.insert({_id:"1", employees:[{ eid:"2", ename:"test", is_user:true }, { eid:"3", ename:"test2", is_user:true } ] })
> db.test.find({_id:"1","employees.eid":"2"});
{ "_id" : "1", "employees" : [  {   "eid" : "2",    "ename" : "test",  "is_user" : true },  {   "eid" : "3",    "ename" : "test2", "is_user" : true } ] }

$次のように使用するオペレーターの場合:

> db.test.insert({_id:"1", employees:[{ eid:"2", ename:"test", is_user:false }, { eid:"3", ename:"test2", is_user:false } ] })
> db.test.find({_id:"1", "employees.eid":"2", "employees.is_user": true});
> db.test.update({_id:"1", "employees.eid":"2"}, {$set: {"employees.$.is_user": true}});
> db.test.find({_id:"1", "employees.eid":"2", "employees.is_user": true});
{ "_id" : "1", "employees" : [  {   "eid" : "2",    "ename" : "test",   "is_user" : true },     {   "eid" : "3",    "ename" : "test2",  "is_user" : false } ] }

配列内の両方のオブジェクトでの挿入がどのようにis_user設定されているかに注意してくださいfalse。更新後、一致するオブジェクトがからfalseに更新されtrueます。これは、探しているものですか?

于 2012-11-12T00:33:08.943 に答える