MongoDBの$eq演算子で配列内のIDを照合し、ドキュメントを取得する方法
MongoDBの$eq演算子とは
配列フィールド内の特定のIDに一致するドキュメントを取得したい場合、find()メソッドと$eq演算子を組み合わせることで実現できます。
$eq演算子は等価条件(equality condition)を指定するための演算子です。フィールドの値が指定した値と完全に一致するドキュメントだけをマッチさせます。ポイントは、配列フィールドに対して$eqを使用すると、配列の要素の中に指定した値が1つでも含まれていれば一致とみなされる点です。
サンプルコレクションの作成
まず、「Ids」という配列フィールドを持つドキュメントを格納したコレクションを作成しましょう。
> db.demo426.insert({"Ids":["110","120","101"]});
WriteResult({ "nInserted" : 1 })
> db.demo426.insert({"Ids":["100","201","401"]});
WriteResult({ "nInserted" : 1 })
> db.demo426.insert({"Ids":["501","600","700"]});
WriteResult({ "nInserted" : 1 })挿入したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo426.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5e75e50fbbc41e36cc3cae72"),
"Ids" : [
"110",
"120",
"101"
]
}
{
"_id" : ObjectId("5e75e51abbc41e36cc3cae73"),
"Ids" : [
"100",
"201",
"401"
]
}
{
"_id" : ObjectId("5e75e527bbc41e36cc3cae74"),
"Ids" : [
"501",
"600",
"700"
]
}$eq演算子でIDを照合するクエリ
それでは、$eq演算子を使って配列内のID「501」に一致するドキュメントを検索してみましょう。
> db.demo426.find({"Ids":{$eq:"501"}});実行すると、Ids配列に「501」が含まれているドキュメントのみが出力されます。
{ "_id" : ObjectId("5e75e527bbc41e36cc3cae74"), "Ids" : [ "501", "600", "700" ] }まとめ
$eq演算子は配列フィールドにもそのまま適用でき、配列の要素のいずれかが指定値と一致していれば、該当するドキュメントが返されます。なお、{ "Ids": "501" }のように演算子を省略して書いた場合も暗黙的に$eqとして扱われるため同じ結果になりますが、明示的に$eqを記述することでクエリの意図がより分かりやすくなります。
-
【MongoDB】aggregate()と$groupで異なるドキュメント内の同じIDを持つ要素を集約する方法
複数のドキュメントにまたがって同じIDを持つ要素をグループ化したい場合には、MongoDBの aggregate() メソッドと $group ステージを組み合わせるのが効果的です。本記事では、実際にサンプルコレクションを作成しながら、IDごとにドキュメントを集約する手順をわかりやすく解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入していきます。ここでは「id」と「Name」というフィールドを持つドキュメントを6件登録します。> db.demo602.insertOne({id:1,Name:"Chris"});{
-
MongoDBで特定の数値より大きいフィールド値を持つドキュメントを照合して取得する方法
MongoDBでドキュメントを照合(マッチング)するには、集計パイプライン(aggregate)内で $match を使用します。さらに、特定の数値より大きい値を条件にしたい場合は、比較演算子の $gt(greater than)を組み合わせます。この記事では、実際にコレクションを作成し、$sort や $limit と組み合わせながら、条件に一致するドキュメントを取得する手順を解説します。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、ドキュメントを含むコレクションを作成しましょう。> db.demo730.insertOne({Name : Chri