配列内の 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
要素が含まれている必要があります。