MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBの$pull演算子で子コレクション内のオブジェクトを削除する方法

MongoDBで子コレクション(ネストされた配列)内のオブジェクトを削除するには、$pull 演算子を使用します。まず、ドキュメントを含むコレクションを作成してみましょう。

1. コレクションの作成とドキュメントの挿入

> db.demo715.insertOne({
...     _id: 1,
...     details: [
...         {
...             'id': '101',
...             'Information': [
...                 {
...                     'studentid': '102',
...                     "Name": "Bob"
...                 },
...                 {
...                     'studentid': '103',
...                     "Name": "Chris"
...                 }
...             ]
...         }
...     ]
... });
{ "acknowledged" : true, "insertedId" : 1 }

2. 挿入したドキュメントの確認

find() メソッドを使用して、コレクション内のすべてのドキュメントを表示します。

> db.demo715.find();

このコマンドを実行すると、次のような出力が得られます。

{ "_id" : 1, "details" : [ { "id" : "101", "Information" : [ { "studentid" : "102", "Name" : "Bob" }, { "studentid" : "103", "Name" : "Chris" } ] } ] }

3. 子コレクション内のオブジェクトを削除するクエリ

以下は、MongoDBの子コレクション内のオブジェクトを削除するためのクエリです。クエリ条件で details.id が '101' のドキュメントに一致させ、位置指定演算子「$」で該当する配列要素を特定したうえで、$pull を使って Information 配列から目的のオブジェクトを取り除きます。

> db.demo715.update(
...     {"details.id": '101'},
...     { $pull: { 'details.$.Information': { studentid: '102', "Name": "Bob" } } }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4. 削除後のドキュメントの確認

もう一度 find() メソッドを実行して、コレクション内のすべてのドキュメントを表示します。

> db.demo715.find();

実行結果は次のとおりです。

{ "_id" : 1, "details" : [ { "id" : "101", "Information" : [ { "studentid" : "103", "Name" : "Chris" } ] } ] }

出力を確認すると、studentid が「102」、Name が「Bob」のオブジェクトが Information 配列から正常に削除され、「Chris」のデータのみが残っていることがわかります。

補足:$pull 演算子のポイント

  • $pull 演算子は、既存の配列から指定した条件に一致する値やオブジェクトをすべて削除します。
  • 位置指定演算子「$」は、クエリ条件に一致した最初の配列要素を参照します。
  • MongoDB 4.2 以降では update() メソッドは非推奨となっているため、新規開発では updateOne() / updateMany() の使用が推奨されます。
  1. MongoDBコレクションにインデックスを作成する方法

    MongoDBコレクションにインデックスを作成する方法MongoDBでインデックスを作成するには、createIndex()メソッドを使用します。インデックスを適切に設定することで、クエリの検索速度を大幅に向上させることができます。まず、ドキュメントを含むコレクションに対してインデックスを作成してみましょう。以下の例では、details.idフィールドに対して昇順(1)のインデックスを作成しています。> db.demo702.createIndex({details.id:1});{   createdCollectionAutomatically : tr

  2. C#でコレクションから最初に出現する要素だけを削除する方法

    C#の Collection<T> クラスでは、Remove() メソッドを使うことで、指定したオブジェクトと一致する「最初の」要素だけを削除できます。同じ値が複数含まれている場合でも、すべてが削除されるわけではなく、先頭に最も近い1件のみが取り除かれる点に注意してください。 Remove()メソッドの基本動作 Remove(T item) メソッドは、コレクションを先頭から走査し、引数で渡した値と一致する最初の要素を見つけて削除します。戻り値はbool型で、削除に成功すれば true、該当する要素が存在しなければ false を返します。 サンプルコード1 まず、同じ名前 Nat