3

pullAll を使用して、mongoDB の配列からいくつかのオブジェクトを削除したいだけです。

db.collection.update({'_id': ObjectId(".....")}, { $pullAll : { 'notifications' : [{'type' : type}, {'id': id}]} })

なぜこれが機能しないのですか?正しい構文は何ですか?

アップデート:

ドキュメントは次のとおりです。

{
    "_id" : ObjectId("......"),
    "notifications" : [ { "type" : "aaa",
                          "id" : "123" },
                        { "type" : "bbb",
                          "id" : "123" },
                        { "type" : "ccc",
                          "id" : "234" }]
}
4

2 に答える 2

2

問題は次の 2 つの場所のいずれかである可能性があります。

まず、更新に構文の問題があります。

db.collection.update({'_id': ObjectId(".....")}, 
     { $pullAll : 
         { 'notifications' : [{'type' : type}, {'id': id}]
         } 
     }
)

次のようにする必要があります。

db.collection.update({'_id': ObjectId(".....")}, 
     { $pullAll : 
         { 'notifications' : [{'type' : type, 'id': id}]
         }  
     }
)

}, {type と idを削除して、1 つの JSON サブドキュメントに結合したことに注意してください。

もう 1 つの問題は、配列要素のid値が "123" 形式の文字列であるように見えることです。更新ステートメントに文字列を渡していますか? 文字列「123」は整数の 123 と等しくありません。

于 2012-11-19T18:40:49.040 に答える
0

$pullAllを使用するには、オブジェクト全体を正確に一致させる必要があります。$pullだけを使用しない理由は、あなたのニーズに合っていると確信しています

于 2012-11-19T17:51:16.667 に答える