MongoDBで特定の数値より大きいフィールド値を持つドキュメントを照合して取得する方法
MongoDBでドキュメントを照合(マッチング)するには、集計パイプライン(aggregate)内で $match を使用します。さらに、特定の数値より大きい値を条件にしたい場合は、比較演算子の $gt(greater than)を組み合わせます。
この記事では、実際にコレクションを作成し、$sort や $limit と組み合わせながら、条件に一致するドキュメントを取得する手順を解説します。
1. サンプルコレクションの作成
まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。
> db.demo730.insertOne({"Name" : "Chris", "Marks" : 33 });
{
"acknowledged" : true,
"insertedId" : ObjectId("5eac54cd56e85a39df5f6339")
}
> db.demo730.insertOne({ "Name" : "David", "Marks" : 89});
{
"acknowledged" : true,
"insertedId" : ObjectId("5eac54cd56e85a39df5f633a")
}
> db.demo730.insertOne({ "Name" : "Chris", "Marks" : 45 });
{
"acknowledged" : true,
"insertedId" : ObjectId("5eac54ce56e85a39df5f633b")
}2. 登録したドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo730.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5eac54cd56e85a39df5f6339"), "Name" : "Chris", "Marks" : 33 }
{ "_id" : ObjectId("5eac54cd56e85a39df5f633a"), "Name" : "David", "Marks" : 89 }
{ "_id" : ObjectId("5eac54ce56e85a39df5f633b"), "Name" : "Chris", "Marks" : 45 }3. $matchと$gtで条件に一致するドキュメントを取得する
それが本題です。次のクエリでは、集計パイプラインの中で $sort による降順ソート、$limit による件数制限を行った上で、$match と $gt、そして $or を使って条件に一致するドキュメントだけを抽出しています。
> db.demo730.aggregate([
... { $sort: { _id: -1 } },
... { $limit: 3 },
... {$match: { $or: [ {"Name": "Chris", "Marks": { "$gt": 40 }}, {"Name": "David"} ]}}
... ])このクエリの条件は次のとおりです。
- 「Name」が「Chris」かつ「Marks」が40より大きいドキュメント
- または「Name」が「David」であるドキュメント
実行すると、以下の出力が得られます。
{ "_id" : ObjectId("5eac54ce56e85a39df5f633b"), "Name" : "Chris", "Marks" : 45 }
{ "_id" : ObjectId("5eac54cd56e85a39df5f633a"), "Name" : "David", "Marks" : 89 }Marks が33の Chris のドキュメントは「40より大きい」という条件を満たさないため、結果から除外されていることがわかります。このように、$match と $gt を組み合わせることで、特定の数値よりも大きいフィールド値を持つドキュメントを柔軟に絞り込んで取得することが可能です。
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "
-
C++で数値とその桁の合計の差が特定の値より大きい数をカウントする方法
本記事では、2つの整数N(探索範囲 [1, N] を定義)とD(差のしきい値)が与えられたとき、「数値 − その桁の合計 > D」という条件を満たす数が範囲内にいくつあるかを求める方法を解説します。解き方はシンプルです。1からNまでの数を順番に走査し、それぞれの数についてwhileループを使って桁の合計を計算します。その後、元の数と桁の合計の差がDより大きいかどうかを判定し、条件を満たしていればカウントを増やします。具体例で理解しよう例1入力:N=15 D=5出力:数値と桁の合計の差がDより大きい数: 6説明:10, 11, 12, 13, 14, 15 が条件を満たします。(10−1,