6

次のドキュメントのコレクションがあるとします。

{ "_id" : ObjectId("50a69fa904c8310609600be3"), "id" : 100, "city" : "San Francisco", "friends" : [     {   "id" : 1,   "name" : "John" },  {   "id" : 2,   "name" : "Betty" },     {   "id" : 3,   "name" : "Harry" } ] }
{ "_id" : ObjectId("50a69fc104c8310609600be4"), "id" : 200, "city" : "Palo Alto", "friends" : [     {   "id" : 1,   "name" : "Carol" },     {   "id" : 2,   "name" : "Frank" },     {   "id" : 3,   "name" : "Norman" } ] }
{ "_id" : ObjectId("50a69fc304c8310609600be5"), "id" : 300, "city" : "Los Angeles", "friends" : [   {   "id" : 1,   "name" : "Fred" },  {   "id" : 2,   "name" : "Neal" },  {   "id" : 3,   "name" : "David" } ] }
    .
    .
    .  

ここで、フランク(パロアルト、id = 2)が私の友達ではなくなったため、コレクションから彼を削除したいとします。私は次のことがうまくいくかもしれないと思ったが、そうではない:

db.test.update({"city":"Palo Alto"},{"$pull":{"friends.name":"Frank"}})

そんなことができるようになりたいです。ドキュメントのコレクション内の配列内のオブジェクトを削除します。これはどうやるんですか?

4

1 に答える 1

13

あなたは近かった。クエリは次のようになります。

db.test.update({"city":"Palo Alto"},{"$pull":{"friends":{"name":"Frank"}}});

$pullフィールドがフィールド配列を指定するオブジェクトを取ります"friends"。値{"name":"Frank"}は、引き出す要素を見つけるための(配列内で実行する)クエリを表します。

于 2012-11-16T20:35:48.223 に答える