MongoDBの集約(Aggregation)で特定のフィールド値を持つドキュメントを取得する方法
特定の条件に一致するドキュメントを取得したい場合には、aggregate() メソッドを使用します。ここでは、フィールド「Age」の値が「21」であるドキュメントを取得するケースを例に解説します。
サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成しましょう。
> db.demo685.insertOne(
... {
... "details":
... [
... {
... Name:"Chris",
... Age:21
... },
... {
... Name:"David",
... Age:23
... },
... {
... Name:"Bob",
... Age:21
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea54f6fa7e81adc6a0b395b")
}
登録済みドキュメントの確認
find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo685.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ea54f6fa7e81adc6a0b395b"), "details" : [
{ "Name" : "Chris", "Age" : 21 },
{ "Name" : "David", "Age" : 23 },
{ "Name" : "Bob", "Age" : 21 }
] }
集約パイプラインによる特定フィールド値の抽出
続いて、MongoDBの集約(アグリゲーション)フレームワークを使ったクエリを見ていきましょう。以下の例では、$unwind で配列を展開し、$match で条件に一致する要素だけを絞り込み、$project で不要なフィールドを除外しています。
> db.demo685.aggregate([ { $unwind: "$details" }, { $match: { "details.Age": 21 } }, { $project: {_id: 0}} ]).pretty();
このクエリを実行すると、「Age」が「21」のドキュメントのみが出力されます。
{ "details" : { "Name" : "Chris", "Age" : 21 } }
{ "details" : { "Name" : "Bob", "Age" : 21 } }
各ステージの役割
- $unwind: 配列型フィールド「details」を個別のドキュメントに展開します。
- $match: 展開後のドキュメントから「details.Age」が 21 のものだけを抽出します。
- $project:
_id: 0を指定することで、結果から_idフィールドを除外し、見やすい出力にします。
このように、aggregate() のパイプラインを組み合わせることで、ネストされた配列の中から特定のフィールド値を持つデータを柔軟に取得できます。
-
MongoDBで特定の数値より大きいフィールド値を持つドキュメントを照合して取得する方法
MongoDBでドキュメントを照合(マッチング)するには、集計パイプライン(aggregate)内で $match を使用します。さらに、特定の数値より大きい値を条件にしたい場合は、比較演算子の $gt(greater than)を組み合わせます。この記事では、実際にコレクションを作成し、$sort や $limit と組み合わせながら、条件に一致するドキュメントを取得する手順を解説します。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo730.insertOne({Name : Chri
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "