2016-09-19 19 views
1

私はMongoには新しく、文書のコレクションの中から配列からデータを取り除くためにクエリを作成する必要があるユースケースを実装しようとしています。ここでMongoDB:文書から配列要素を削除する

は私のドキュメントの1つである:

{ 
"id" : 2, 
"owners" : ["aa", "bb"] 
} 

は今、私は所有者に基づいて、すべての文書のレコードを検索し、存在する場合、owners配列からそれらを削除するには、クエリを構築する必要があります。

たとえば、クエリにaaを送信した場合、その所有者が含まれているすべてのドキュメントから削除する必要があります。

私はどこかでこのロジックが見つかりました:

$db.coll.update({cond to identify document},{$pull:{'owners':{'aa':<>}}}) 

をしかし、どのように、これはデータを削除しない理解していません。前もって感謝します!

答えて

4

次のクエリは、一致したownersowners配列から削除してコレクションを更新します。更新クエリは、三つのブロックが含まれてい

db.coll.update(
     { }, 
     { $pull: { owners: "aa" } }, 
     { multi: true } 
    ) 

最初のブロック{}:この1つは削除されます。それは我々がすべての文書を検討しているとして、我々はそれが空白

第二のブロック{ $pull: { owners: "aa" } }保たれ、ドキュメントを検索するクエリを指定しますすべての文書のowners配列の要素を一致させます。

第3ブロック{ multi: true }:このブロックは、我々はすべての一致する文書の更新を検討していることを指定し、{ multi: false }は、より多くのあなたが返信するため、このlink

+1

感謝をたどることができます学ぶためにのみ最初に一致した文書

を更新します。ここで何が起こっているのか正確に説明できますか? –

+0

@ CodeKaro最新の回答をご覧ください。 – gypsyCoder

+1

更新方法では、更新操作では、完全なコレクションスキャンを実行するのではなく、クエリで一致するドキュメントのみを更新し、コレクション内の各ドキュメントをチェックしてから大規模なデータセットでは速度が遅くなる「$ pull」があります。クエリを 'db.coll.update( {" owners ":" aa "}、 {" $ pull ":{" owners ":" aa "}}、 {"マルチ ":true} )' – chridam

関連する問題