MongoDBでクエリと完全に一致する配列要素を持つドキュメントを検索する方法
MongoDBで、指定したクエリとまったく同じ配列要素を含むドキュメントを検索したい場合には、$all 演算子を使用します。この記事では、実際にサンプルコレクションを作成しながら、具体的な検索手順をわかりやすく解説します。
サンプルコレクションの作成
まず、insertOne() メソッドを使って、テスト用のコレクションに複数のドキュメントを挿入します。
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["C++","Java","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd69a5f57806ebf1256f12e")
}
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["MySQL","Java","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd69ac057806ebf1256f12f")
}
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["C#","Python","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd69ad457806ebf1256f130")
}
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["MySQL","C","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd69adf57806ebf1256f131")
}
登録されたドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.findDocumentExactlySameInArrayDemo.find().pretty();
上記のクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cd69a5f57806ebf1256f12e"),
"TechnicalSubjects" : [
"C++",
"Java",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd69ac057806ebf1256f12f"),
"TechnicalSubjects" : [
"MySQL",
"Java",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd69ad457806ebf1256f130"),
"TechnicalSubjects" : [
"C#",
"Python",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd69adf57806ebf1256f131"),
"TechnicalSubjects" : [
"MySQL",
"C",
"MongoDB"
]
}
$all 演算子で目的のドキュメントを検索する
それでは本題です。次のクエリを実行すると、「MySQL」「Java」「MongoDB」という要素をすべて含むドキュメントだけを抽出できます。
> db.findDocumentExactlySameInArrayDemo.find({"TechnicalSubjects": { "$all": ["MySQL","Java","MongoDB"] }});
実行結果は以下のとおりです。4件のうち、条件に合致した1件のみが返されていることがわかります。
{ "_id" : ObjectId("5cd69ac057806ebf1256f12f"), "TechnicalSubjects" : [ "MySQL", "Java", "MongoDB" ] }
$all 演算子のポイント
$all 演算子は、指定したすべての要素が配列フィールドに含まれているかどうかを判定します。要素の並び順は問われないため、順序が異なる配列でも条件を満たせばマッチします。なお、配列の要素数まで含めて厳密に完全一致させたい場合は、$size 演算子を組み合わせることで、より正確な検索を行うことも可能です。用途に応じて使い分けるとよいでしょう。
-
特定のFirstNameとLastNameを持つドキュメントを検索するMongoDBクエリの書き方
はじめにMongoDBで特定のFirstNameとLastNameを持つドキュメントを検索するには、$and演算子と$in演算子を組み合わせて使用します。この記事では、実際のコード例を通して、find()メソッドでこの条件を実装する方法を解説します。サンプルコレクションの作成まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成しましょう。> db.demo692.insertOne({FirstName:"Chris","LastName":"Brown"}); { "acknowl
-
MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)
MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って