配列内の MongoDB 集計一致
- 配列内の MongoDB 集計一致
-
MongoDB の配列で
$matchと$inを使用して一致するドキュメントを検索する -
MongoDB の配列で
$matchと$eqを使用して一致するドキュメントを検索する -
MongoDB の配列で
$matchと$allを使用して一致するドキュメントを検索する
この記事では、コード例を使用して、配列で MongoDB 集計一致を使用する方法について説明します。文字列型配列と数値型配列を使用して、さまざまな例を検討します。
配列内の MongoDB 集計一致
比較演算子、$and/$or 演算子、および $group/$project ステージで一致集計ステージを使用する方法をすでに学習しました。その記事はここにあります。
ここでは、一致するドキュメントを見つけるために、配列内の MongoDB 集計一致の学習に焦点を当てます。少なくとも 1つのフィールドに配列が含まれるコレクションを作成します。
以下のコマンドを利用して、私たちと一緒にフォローすることができます。
サンプルコード:
db.createCollection('student_courses');
db.student_courses.insertMany([
{"_id": "ma01", courses: ['Java', 'Python', 'Databases'], results: [3,5]},
{"_id": "sd02", courses: ['Java', 'Python'], results: [6,3]},
{"_id": "gh03", courses: ['JavaScript', 'Angular'], results: [8,9]},
{"_id": "rt04", courses: ['Data Science', 'Python'], results: [2,5]}
]);
db.student_courses.find();
出力:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
{ "_id" : "rt04", "courses" : [ "Data Science", "Python" ], "results" : [ 2, 5 ] }
MongoDB の配列で $match と $in を使用して一致するドキュメントを検索する
サンプルコード:
db.student_courses.aggregate({
$match:{
$expr:{ $in: ['Java', "$courses"]}
}
});
出力:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
このコードスニペットは、$match と $expr を使用して、クエリ言語内で集計式を使用できるようにします。ここで、$expr は、$match ステージの正確なドキュメントのフィールドを比較するクエリ式を作成します。
さらに、$in 演算子は、courses 配列に配列要素として Java が含まれているドキュメントを選択します。指定された配列の複数の値をチェックするには、次の方法でクエリを使用します。
サンプルコード:
db.student_courses.aggregate({
$match:{
courses:{ $in: ['Java', 'Python']}
}
});
出力:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
{ "_id" : "rt04", "courses" : [ "Data Science", "Python" ], "results" : [ 2, 5 ] }
この例では、courses 配列に Java または Python(あるいはその両方)があるドキュメントのみを選択します。同様に、数値配列を操作できます。
サンプルコード:
db.student_courses.aggregate({
$match:{
results:{ $in: [3,6]}
}
});
出力:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
このクエリは、results 配列に 3 または 6(あるいはその両方)が含まれているドキュメントのみを取得します。
サンプルコード:
db.student_courses.aggregate({
$match:{
$expr:{ $gt: [{$sum: "$results"}, 10]}
}
});
出力:
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
ここでは、results 配列のすべての要素の合計が 10 より大きいドキュメントのみを選択します。
MongoDB の配列で $match と $eq を使用して一致するドキュメントを検索する
サンプルコード:
db.student_courses.aggregate({
$match:{
courses:{ $eq: ['Java', 'Python']}
}
});
出力:
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
ここでは、$eq 演算子を使用して、$eq 演算子で指定したとおりに courses 配列に正確な配列が含まれている要素のみを取得します。
MongoDB の配列で $match と $all を使用して一致するドキュメントを検索する
サンプルコード:
db.student_courses.aggregate({
$match:{
courses:{ $all: ['Java', 'Python']}
}
});
出力:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
$all は $and 演算子と同等です。このコードは、courses 配列に $all 演算子に指定されたすべての要素が含まれているすべてのドキュメントを取得します。
結果のドキュメントには、Java および Python 要素が含まれている必要があります。
