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

MongoDBでネストされた配列の中身をクリア(空に)する方法

MongoDBでネストされた配列の要素をクリアするには

MongoDBにおいて、ドキュメント内のネストされた配列(入れ子になった配列)の要素をすべて削除して空にしたい場合は、$set 演算子を使用します。対象の配列フィールドに対して空の配列 [] をセットすることで、ネストされた配列の中身を一括でクリアできます。

この記事では、実際にコレクションを作成し、ネストされた配列の要素をクリアする手順を順番に解説します。

1. サンプルコレクションの作成

まず、insertOne() メソッドを使って、ネストされた配列を含むドキュメントを持つコレクションを作成します。以下は「StudentDetails」という配列の中に、さらに「ProjectDetails」という配列が入った二重構造の例です。

> db.clearingItemsInNestedArrayDemo.insertOne( {
...     "StudentName" : "John",
...     "StudentDetails" : [
...        {
...           "ProjectName" : "Online Banking",
...           "ProjectDetails" : [
...              {
...                 "TechnologyUsed" : "Java",
...                 "TeamSize": 5
...              }
...           ]
...        }
...     ]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9930b4330fd0aa0d2fe4ce")
}

これで、学生情報とそのプロジェクト詳細がネストされた形で格納されたドキュメントが登録されました。

2. 登録したドキュメントの確認

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

> db.clearingItemsInNestedArrayDemo.find().pretty();

上記のクエリを実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5c9930b4330fd0aa0d2fe4ce"),
    "StudentName" : "John",
    "StudentDetails" : [
       {
          "ProjectName" : "Online Banking",
          "ProjectDetails" : [
             {
                "TechnologyUsed" : "Java",
                "TeamSize" : 5
             }
          ]
       }
    ]
}

現時点では、「StudentDetails」配列の中にプロジェクト情報が格納されていることが確認できます。

3. ネストされた配列の要素をクリアするクエリ

それでは、ネストされた配列「StudentDetails」の中身をクリアしてみます。update() メソッドと $set 演算子を組み合わせて、該当するドキュメントの配列フィールドに空の配列をセットします。

> db.clearingItemsInNestedArrayDemo.update({"StudentName": "John"}, {"$set": {"StudentDetails": []}});
Updated 1 existing record(s) in 4ms
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果を見ると、「nMatched: 1」「nModified: 1」と表示されており、1件のドキュメントが正常に更新されたことがわかります。

ポイント: $set 演算子で配列全体を [](空の配列)に置き換えることで、配列内の全要素を一括で削除できます。特定の条件に一致する要素だけを削除したい場合は、代わりに $pull や $pullAll 演算子の使用を検討してください。

4. 更新結果の検証

最後に、再度 find() メソッドを実行して、ネストされた配列から要素が正しくクリアされたかどうかを確認しましょう。

> db.clearingItemsInNestedArrayDemo.find().pretty();

実行すると、以下の出力が得られます。

{
    "_id" : ObjectId("5c9930b4330fd0aa0d2fe4ce"),
    "StudentName" : "John",
    "StudentDetails" : [ ]
}

出力結果から、「StudentName」フィールドはそのまま残り、「StudentDetails」配列のみが空になっていることが確認できます。このように、$set 演算子を使えば、ネストされた配列の中身を他のフィールドに影響を与えることなく簡単にクリアできます。

  1. MongoDBで配列内の要素数をカウントする方法

    MongoDBで配列内の要素数をカウントする基本MongoDBで配列(Array)内のアイテム数をカウントするには、lengthプロパティを使用します。この記事では、実際にコレクションを作成し、配列の要素数を取得するまでの手順を実行例付きで解説します。1. コレクションにドキュメントを挿入するまず、insertOne()メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成しましょう。> db.demo440.insertOne( ...    { ...       "Name":"Ch

  2. MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ

    MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..