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

MongoDBで配列型フィールドの値を除外する方法

MongoDBで配列型フィールドの値を除外するには?

配列型フィールド内の値(要素の中身)を除外したい場合は、MongoDBのdelete()を使用します。この記事では、実際にコレクションを作成し、配列の各要素から特定のフィールドを削除する手順をサンプルコード付きで解説します。

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

まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成しましょう。

> db.demo464.insertOne(
... {
...     "id" : "101",
...     "details": [
...        {
...           Name:"Chris"
...        },
...        {
...           Name:"David"
...        }
...     ]
... }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e7f8832cb66ccba22cc9dda")
}

2. ドキュメントの確認

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

> db.demo464.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e7f8832cb66ccba22cc9dda"), "id" : "101", "details" : [ { "Name" : "Chris" }, { "Name" : "David" } ] }

3. 配列型フィールドの値を除外するクエリ

以下は、配列型フィールドの値を除外するためのクエリです。forEach()で対象ドキュメントを1件ずつ取り出し、forループで配列の各要素にアクセスして、delete()によりNameフィールドを削除します。最後にsave()で変更後のドキュメントを保存し直しています。

> db.demo464.find({id: "101"}).forEach(function(mongoDocument) {
...
... var details = mongoDocument.details;
... for(var j = 0; j < details.length; ++j) {
... var array = details[j];
... delete (array["Name"]);
...
... }
... db.demo464.save(mongoDocument);
... });

4. 実行結果の確認

処理完了後、もう一度find()メソッドでドキュメントを表示して結果を確認します。

> db.demo464.find();

出力を見ると、details配列の各要素からNameフィールドが削除され、空のオブジェクトになっていることがわかります。

{ "_id" : ObjectId("5e7f8832cb66ccba22cc9dda"), "id" : "101", "details" : [ { }, { } ] }

このように、forEach()delete()を組み合わせることで、MongoDBの配列型フィールド内の特定の値を簡単に除外できます。条件に一致するドキュメントだけを更新したい場合は、find()の検索条件を適宜変更してください。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)

    MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr