MongoDBで配列フィールドに対して$allを使って全要素に一致させる方法
配列フィールドの全要素に一致させるには
MongoDBで配列内のすべての指定要素を含むドキュメントを検索したい場合には、$all 演算子を使用します。$all は、対象フィールドの値が配列であり、その配列が指定した要素をすべて含んでいるドキュメントだけを選択するクエリ演算子です。
ここでは、サンプルコレクションを作成し、実際に $all を使った検索手順を順番に見ていきましょう。
1. コレクションへのドキュメント登録
まずは insertOne() メソッドを使って、サンプルコレクション「demo695」にドキュメントを挿入します。
> db.demo695.insertOne({"ListOfValues":[100,200,500,800]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea6d4c4551299a9f98c938f")
}
> db.demo695.insertOne({"ListOfValues":[1000,200,4000]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea6d4cf551299a9f98c9390")
}
2. 登録済みドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo695.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ea6d4c4551299a9f98c938f"), "ListOfValues" : [ 100, 200, 500, 800 ] }
{ "_id" : ObjectId("5ea6d4cf551299a9f98c9390"), "ListOfValues" : [ 1000, 200, 4000 ] }
3. $all演算子で全要素に一致するドキュメントを取得
続いて、配列フィールド「ListOfValues」に対して $all を使用し、「1000」「200」「4000」の3つの値をすべて含むドキュメントを検索してみましょう。
> db.demo695.find({"ListOfValues":{$all:[1000,200,4000]}});
実行結果は以下のとおりです。条件として指定した要素をすべて持つドキュメントのみが返されていることがわかります。
{ "_id" : ObjectId("5ea6d4cf551299a9f98c9390"), "ListOfValues" : [ 1000, 200, 4000 ] }
ポイントまとめ
$allは配列フィールドに対して使用し、指定したすべての要素を含むドキュメントのみを返す。- 要素の並び順や配列の長さは問われず、「含まれているかどうか」だけが判定基準になる。
- 一部の要素しか一致しない場合は、そのドキュメントは結果から除外される。
-
MongoDBにJavaScript関数を保存・実行する方法をわかりやすく解説
MongoDBに保存されたJavaScriptを操作する方法 MongoDBでは、JavaScriptの関数をデータベース内の特別なコレクション「system.js」に保存できます。この仕組みを利用すれば、よく使う処理をサーバー側に登録しておき、必要なときにいつでも呼び出すことが可能です。関数の保存には db.system.js.save() メソッドを使用します。 JavaScript関数を保存する基本構文 db.system.js.save({ _id: anyFunctionName, value: function (returnValue) { re
-
MongoDBで特定の値より大きい配列要素を持つドキュメントを照会する方法($elemMatch活用)
MongoDBで配列内の値を条件に照合するにはMongoDBでは、$elemMatch 演算子を使用することで、指定したすべてのクエリ条件に一致する要素が少なくとも1つ含まれる配列フィールドを持つドキュメントを照合できます。ここでは、配列内の値が特定の値より大きいドキュメントを検索する方法を、具体的なサンプルコードとともに解説します。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成します。> db.demo701.insertOne({ListOfValues:[100,200,300]}); { acknowledged : true, ins