MongoDBで同じ配列要素に一致するドキュメントを検索する方法
MongoDBで$all演算子を使って配列要素の一致するドキュメントを取得する
MongoDBで、特定の配列要素と同じ内容を持つドキュメントを検索するには、find()メソッドの中で$all演算子を使用します。$all演算子は、フィールドの値が配列であり、その配列が指定されたすべての要素を含んでいるドキュメントを選択します。さらに$size演算子を組み合わせることで、要素数まで一致するドキュメントを正確に絞り込むことが可能です。
それでは、まずドキュメントを含むコレクションを作成しましょう。
> db.demo543.insertOne({id:101, subject:["MySQL", "Java" ,"C","Python"]});{
"acknowledged" : true,
"insertedId" : ObjectId("5e8e1b2f9e5f92834d7f05c9")
}
> db.demo543.insertOne({id:102, subject:["MySQL", "MongoDB" ,"SQL Server"]});{
"acknowledged" : true,
"insertedId" : ObjectId("5e8e1b2f9e5f92834d7f05ca")
}次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo543.find();
上記のコマンドを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e8e1b2f9e5f92834d7f05c9"), "id" : 101, "subject" : [ "MySQL", "Java", "C", "Python" ] }
{ "_id" : ObjectId("5e8e1b2f9e5f92834d7f05ca"), "id" : 102, "subject" : [ "MySQL", "MongoDB", "SQL Server" ] }続いて、同じ配列要素に一致するドキュメントを検索するためのクエリを見ていきましょう。
> db.demo543.find({
... "subject": { $all: [ "MySQL", "MongoDB", "SQL Server"], $size: 3 }
... })このクエリでは、$allによって「MySQL」「MongoDB」「SQL Server」の3つの要素をすべて含むことを条件とし、$size:3によって配列の長さがちょうど3であることも要求しています。これにより、指定した要素と完全に一致する配列を持つドキュメントだけが抽出されます。
実行結果は以下の通りです。
{ "_id" : ObjectId("5e8e1b2f9e5f92834d7f05ca"), "id" : 102, "subject" : [ "MySQL", "MongoDB", "SQL Server" ] }なお、$all演算子は配列要素の順序を問わず一致を判定します。そのため、要素の並び順が異なる配列でも、指定した要素がすべて含まれていればマッチします。要素の種類と数の両方を厳密に制限したい場合は、この例のように$sizeとの併用が非常に有効です。
-
MongoDBで配列内の要素を指定して特定のドキュメントを取得する方法
MongoDBのfind()でドット表記を使った特定ドキュメントの取得MongoDBで配列内に格納されたフィールドの値を条件に、特定のドキュメントだけを取得したい場合は、find()メソッドとドット表記(dot notation)を組み合わせるのが基本です。この記事では、実際のコード例を通して、その手順をわかりやすく解説します。1. サンプルコレクションとドキュメントの作成まずはテスト用のコレクションを作成し、配列の中にオブジェクトを持つドキュメントを挿入してみましょう。insertOne()メソッドを使用して、以下のように3件のドキュメントを登録します。> db.demo672.ins
-
MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法
MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ... { ... Information:Student, ... &