【MongoDB】名前のリストを条件にクエリ結果(タグ数)を取得する方法
MongoDBで名前のリストに基づいてドキュメントを取得するには?
MongoDBでは、$in演算子を使用することで、指定した名前のリストに含まれる値を持つドキュメントを効率的に検索できます。ここでは、実際にコレクションを作成し、$in演算子を使って条件に一致するドキュメントを取得する手順を解説します。
1. コレクションとドキュメントの作成
まずはinsertOne()メソッドを使って、サンプルとなるドキュメントを登録したコレクション「tagCountDemo」を作成します。
> db.tagCountDemo.insertOne({"ListOfNames":["John","Sam","Carol"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd64b387924bb85b3f48944")
}
> db.tagCountDemo.insertOne({"ListOfNames":["Bob","David","John"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd64b4b7924bb85b3f48945")
}
> db.tagCountDemo.insertOne({"ListOfNames":["Mike","Robert","Chris"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd64b5d7924bb85b3f48946")
}
> db.tagCountDemo.insertOne({"ListOfNames":["James","Carol","Jace"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd64b717924bb85b3f48947")
}これで、「ListOfNames」というフィールドに複数の名前が配列形式で格納された4件のドキュメントが準備できました。
2. 登録した全ドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。pretty()メソッドを組み合わせると、出力結果が整形されて読みやすくなります。
> db.tagCountDemo.find().pretty();
上記のクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5cd64b387924bb85b3f48944"),
"ListOfNames" : [
"John",
"Sam",
"Carol"
]
}
{
"_id" : ObjectId("5cd64b4b7924bb85b3f48945"),
"ListOfNames" : [
"Bob",
"David",
"John"
]
}
{
"_id" : ObjectId("5cd64b5d7924bb85b3f48946"),
"ListOfNames" : [
"Mike",
"Robert",
"Chris"
]
}
{
"_id" : ObjectId("5cd64b717924bb85b3f48947"),
"ListOfNames" : [
"James",
"Carol",
"Jace"
]
}3. $in演算子を使って該当ドキュメントを取得する
次に、本題である$in演算子を使ったクエリを見ていきましょう。以下の例では、「John」または「Carol」を含むドキュメントを検索しています。
> db.tagCountDemo.find({"ListOfNames":{$in:['John','Carol']}});このクエリを実行すると、配列内に「John」か「Carol」のいずれかが含まれているドキュメントだけが出力されます。
{ "_id" : ObjectId("5cd64b387924bb85b3f48944"), "ListOfNames" : [ "John", "Sam", "Carol" ] }
{ "_id" : ObjectId("5cd64b4b7924bb85b3f48945"), "ListOfNames" : [ "Bob", "David", "John" ] }
{ "_id" : ObjectId("5cd64b717924bb85b3f48947"), "ListOfNames" : [ "James", "Carol", "Jace" ] }まとめ
$in演算子は、配列フィールドに対して複数の候補値をまとめて指定できる便利な機能です。上記の出力からも分かるように、「Mike」「Robert」「Chris」を含むドキュメントのみが除外され、条件に一致する3件のドキュメントが取得できました。この方法を応用すれば、名前のリストだけでなく、タグやカテゴリなどさまざまな配列データの絞り込みに活用できます。さらに一致件数だけを取得したい場合は、find()の後にcount()メソッドを組み合わせることで実現可能です。
-
MongoDB集計パイプラインで重複するNameフィールド値ごとの出現回数を取得する方法
MongoDBでは、$unwindと$groupを組み合わせた集計(アグリゲーション)パイプラインを使うことで、配列内に存在する重複したフィールド値を名前ごとにグループ化し、それぞれの出現回数を簡単に取得できます。ここでは、具体的な例をもとにその手順を解説します。サンプルコレクションの作成まずは、ドキュメントを含むコレクションを作成してみましょう。以下の例では、demo558というコレクションに、国コードと複数人の受講科目情報を持つドキュメントを挿入します。> db.demo558.insertOne( ... { ... _id : 100, ... CountryCode
-
MongoDBで重複するIDごとの評価(レーティング)平均を取得する方法
MongoDBで重複するIDごとの評価平均を取得する方法MongoDBで平均値を計算するには、集計フレームワーク(Aggregation Pipeline)の $avg 演算子を使用します。本記事では、重複する id を持つドキュメントから、IDごとの評価(rating)の平均値を求める手順を、実際のコード例とともにわかりやすく解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、重複する id とそれぞれの評価値を持つドキュメントをコレクションに登録します。一部のドキュメントには評価として null が設定されている点に注目してください。> db.