MongoDBで$eq、$not、$lte、$inなどの演算子を使って特定の値をクエリ・取得する方法
MongoDBでは、$eq、$not、$lte、$inなどの比較演算子を組み合わせることで、配列フィールドの中から特定の値を持つドキュメントを柔軟に抽出できます。本記事では、実際のコード例を通じて、これらの演算子を使ったデータ取得の方法をわかりやすく解説します。
コレクションの作成とドキュメントの挿入
まず、insertOne()メソッドを使ってサンプルコレクション「demo130」を作成し、プレイヤーのスコア情報を含むドキュメントを挿入します。
> db.demo130.insertOne(
... {
...
... "PlayerDetails":[{Score:56},{Score:78},{Score:89},{Score:97}]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3065bf68e7f832db1a7f6d")
}
> db.demo130.insertOne(
... {
...
... "PlayerDetails":[{Score:45},{Score:56}]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3065c068e7f832db1a7f6e")
}
挿入したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo130.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3065bf68e7f832db1a7f6d"), "PlayerDetails" : [ { "Score" : 56 }, { "Score" : 78 }, { "Score" : 89 }, { "Score" : 97 } ] }
{ "_id" : ObjectId("5e3065c068e7f832db1a7f6e"), "PlayerDetails" : [ { "Score" : 45 }, { "Score" : 56 } ] }
特定の値を取得するクエリ
以下は、「PlayerDetails.Score」の中に値56と完全に一致する要素を含むドキュメントのみを取得するクエリです。$eqで「56と等しい」という条件を指定し、さらに$notと$gtを組み合わせて「56より大きい」ケースを除外しています。
> db.demo130.find({
... "PlayerDetails.Score": {
... "$eq": 56,
... "$not": { "$gt": 56}
... }
... })
このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e3065c068e7f832db1a7f6e"), "PlayerDetails" : [ { "Score" : 45 }, { "Score" : 56 } ] }
ご覧のとおり、スコア56を含む2番目のドキュメントだけが正しく取得できました。
主な比較演算子の解説
MongoDBでよく使われる比較演算子は以下のとおりです。
- $eq:指定した値と等しい場合に一致
- $ne:指定した値と等しくない場合に一致
- $gt / $gte:より大きい/以上の場合に一致
- $lt / $lte:より小さい/以下の場合に一致
- $in:指定した配列内のいずれかの値に一致
- $nin:指定した配列内のどの値にも一致しない
- $not:直後の条件式を否定(NOT条件)
たとえば、スコアが80以下の要素を検索したい場合は { "PlayerDetails.Score": { "$lte": 80 } } のように記述します。また、スコアが45または78のいずれかに一致するドキュメントを検索したい場合は { "PlayerDetails.Score": { "$in": [45, 78] } } を使用します。
これらの演算子を目的に応じて適切に組み合わせることで、複雑な条件でのデータ取得もシンプルかつ効率的に実現できます。
-
MongoDBで特定の数値より大きいフィールド値を持つドキュメントを照合して取得する方法
MongoDBでドキュメントを照合(マッチング)するには、集計パイプライン(aggregate)内で $match を使用します。さらに、特定の数値より大きい値を条件にしたい場合は、比較演算子の $gt(greater than)を組み合わせます。この記事では、実際にコレクションを作成し、$sort や $limit と組み合わせながら、条件に一致するドキュメントを取得する手順を解説します。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo730.insertOne({Name : Chri
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "