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()の検索条件を適宜変更してください。
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド
-
MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)
MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr