2017-11-12 2 views
0

pronunciationsアレイ内のすべてのオブジェクトをチェックし、各オブジェクトのlikesアレイにremove_thisが含まれているかどうかを確認し、それをすべてlikesアレイから削除します。Mongodbで1つのクエリで異なるオブジェクトにある配列の要素を削除するにはどうすればよいですか?

{ 
    "_id": "5a052785aa06c22429717bad", 
    "word": "wordtest5", 
    "__v": 0, 
    "pronunciations": [ 
     { 
      "pronunciation": "wordtest1", 
      "_id": "5a052785aa06c22429717bae", 
      "likes": [ 
       "remove_this", 
       "5a0508cfcf4f6620786a3cb1" 
      ], 
      "rating": 1 
     }, 
     { 
      "pronunciation": "wordtest5", 
      "_id": "5a0674c1053ae929db3a576c", 
      "likes": [], 
      "rating": 1 
     }, 
     { 
      "pronunciation": "testing5", 
      "_id": "5a06770346be3d2ac6f31561", 
      "likes": [ 
       "remove_this", 
       "5a0508cfcf4f6620786a3cb1", 
      ], 
      "rating": 1 
     } 
    ] 
} 

私はすべてのlikes、アレイ内のすべてのremove_thisの文字列を削除したいです。

+0

が、これは何かのエクササイズをクレンジングデータオフ1ですアプリケーションの通常の操作の一部として実行する必要がありますか? – dnickless

答えて

0

これは運動しクレンジングデータオフ1である場合にMongoDBは何のドキュメントが更新されなかったと言うまで、あなたは、単に何度も何度も、次のコマンドを実行できます。

db.collection.update({"pronunciations.likes": "remove_this"}, { $pull: { "pronunciations.$.likes": "remove_this" } }) 
+0

はい、そうです。 pronunciations.likesは 'likes'配列の参照ですか?最初に各オブジェクトを通過する必要はありませんか?私はそれを試してみましょう。ありがとうございました。 – earthyearth

+0

わかりません... ...?いくつかのサンプルデータで試してみてください! – dnickless

+1

https://docs.mongodb.com/manual/reference/operator/update/positional/のドキュメントによれば、$は配列の最初のエントリのみを更新します。したがって、これはポジション0のエントリだけを更新し、ポジション2のエントリは更新しません。これはあなたが望むものではないと思いますか? –

関連する問題