MongoDBのAggregationでサブセットに条件を適用する方法($setIsSubsetの使い方)
MongoDBの集計パイプライン(Aggregation)では、$setIsSubset演算子を使うことで、配列が指定したサブセットを含んでいるかどうかを判定し、その結果に基づいて条件分岐を行うことができます。この記事では、実際のサンプルコードとともに、$setIsSubsetの基本的な使い方を解説します。
サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成しましょう。ここでは、学生の名前と好きな科目のリストを持つ「subsetDemo」コレクションを使用します。
> db.subsetDemo.insertOne({"StudentName":"Chris","StudentFavouriteSubject":["Java","Python"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e063e49150ee0e76c06a052")
}
> db.subsetDemo.insertOne({"StudentName":"Chris","StudentFavouriteSubject":["Java","Python","MySQL"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e063e4f150ee0e76c06a053")
}
上記のコードでは、1人目の学生は「Java」と「Python」を、2人目の学生はそれらに加えて「MySQL」も好きな科目として登録しています。
登録したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.subsetDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5e063e49150ee0e76c06a052"),
"StudentName" : "Chris",
"StudentFavouriteSubject" : [
"Java",
"Python"
]
}
{
"_id" : ObjectId("5e063e4f150ee0e76c06a053"),
"StudentName" : "Chris",
"StudentFavouriteSubject" : [
"Java",
"Python",
"MySQL"
]
}
$setIsSubsetで条件を適用する
それでは、MongoDBのAggregationパイプライン内でサブセットに条件を適用するクエリを見ていきましょう。ここでは、「好きな科目の中にMySQLが含まれているかどうか」を判定するフィールド「isMySQL」を追加しています。
> db.subsetDemo.aggregate([
... {
... $project: {
... _id: 0,
... StudentName: 1,
... isMySQL: {
... $setIsSubset: [["MySQL"], "$StudentFavouriteSubject"]
... }
... }
... }
... ]);
このクエリのポイントは以下の通りです。
$projectステージで、出力フィールドを制御しています(_id: 0でIDを非表示にし、学生名を表示)。$setIsSubsetは、第一引数の配列が第二引数の配列の部分集合である場合にtrue、そうでなければfalseを返します。- ここでは
["MySQL"]が$StudentFavouriteSubjectに含まれるかをチェックしています。
実行結果
上記のAggregationを実行すると、次のような出力が得られます。
{ "StudentName" : "Chris", "isMySQL" : false }
{ "StudentName" : "Chris", "isMySQL" : true }
1つ目のドキュメントは「MySQL」を含んでいないためfalseとなり、2つ目のドキュメントは「MySQL」を含んでいるためtrueとなっています。このように、$setIsSubsetを使えば、配列フィールドに対して柔軟に条件判定を行うことができます。
-
MongoDBで条件付きの文字列連結を行う方法($condと$concatの使い方)
MongoDBで条件付きの文字列連結を実現する方法 MongoDBでは、$cond演算子の中で$concatを組み合わせることで、条件に基づいた文字列の連結とドキュメントのフィルタリングが可能です。本記事では、実際のコード例を通じて、その実装手順をわかりやすく解説します。 サンプルコレクションの作成 まず、ドキュメントを格納するコレクションを作成します。insertOne()メソッドを使って、3件のドキュメントを挿入してみましょう。 > db.demo745.insertOne({Value1:100,Value2:100}); { acknowledged : true,
-
MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説
MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db