MongoDB Aggregate Match in einem Array
- MongoDB Aggregate Match in einem Array
-
Verwenden Sie
$match
mit$in
um übereinstimmende Dokumente in einem Array in MongoDB zu finden -
Verwenden Sie
$match
mit$eq
, um übereinstimmende Dokumente in einem Array in MongoDB zu finden -
Verwenden Sie
$match
mit$all
, um übereinstimmende Dokumente in einem Array in MongoDB zu finden
Dieser Artikel informiert mithilfe von Codebeispielen über die Verwendung des MongoDB-Aggregatabgleichs in einem Array. Wir werden verschiedene Beispiele untersuchen, die Arrays vom Typ String und Arrays vom numerischen Typ verwenden.
MongoDB Aggregate Match in einem Array
Wir haben bereits gelernt, die Match-Aggregation-Stufe mit Vergleichsoperatoren, $and
/$or
-Operatoren und $group
/$project
-Stufen zu verwenden. Sie finden diesen Artikel hier.
Hier konzentrieren wir uns darauf, den MongoDB-Aggregat-Match in einem Array zu lernen, um übereinstimmende Dokumente zu finden. So erstellen Sie eine Sammlung, in der mindestens ein Feld ein Array enthält.
Sie können die folgenden Befehle nutzen, um uns zu folgen.
Beispielcode:
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();
Ausgabe:
{ "_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 ] }
Verwenden Sie $match
mit $in
um übereinstimmende Dokumente in einem Array in MongoDB zu finden
Beispielcode:
db.student_courses.aggregate({
$match:{
$expr:{ $in: ['Java', "$courses"]}
}
});
Ausgabe:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Dieses Code-Snippet verwendet $match
mit $expr
, damit wir Aggregationsausdrücke innerhalb einer Abfragesprache verwenden können. Hier baut $expr
den Abfrageausdruck auf, der die Felder aus den exakten Dokumenten in der Stufe $match
vergleicht.
Weiterhin selektiert der Operator $in
jene Dokumente, bei denen das Array courses
Java
als Array-Element enthält. Um mehrere Werte im angegebenen Array zu überprüfen, verwenden Sie die Abfrage wie folgt.
Beispielcode:
db.student_courses.aggregate({
$match:{
courses:{ $in: ['Java', 'Python']}
}
});
Ausgabe:
{ "_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 ] }
In diesem Beispiel werden nur die Dokumente ausgewählt, bei denen das Array courses
entweder Java
oder Python
(oder beides) enthält. Ebenso können wir mit einem numerischen Array arbeiten.
Beispielcode:
db.student_courses.aggregate({
$match:{
results:{ $in: [3,6]}
}
});
Ausgabe:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Diese Abfrage ruft nur die Dokumente ab, bei denen das Array results
entweder 3
oder 6
(oder beides) enthält.
Beispielcode:
db.student_courses.aggregate({
$match:{
$expr:{ $gt: [{$sum: "$results"}, 10]}
}
});
Ausgabe:
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
Hier wählen wir nur die Dokumente aus, bei denen die Summe aller Elemente des Arrays results
grösser als 10
ist.
Verwenden Sie $match
mit $eq
, um übereinstimmende Dokumente in einem Array in MongoDB zu finden
Beispielcode:
db.student_courses.aggregate({
$match:{
courses:{ $eq: ['Java', 'Python']}
}
});
Ausgabe:
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Hier verwenden wir den Operator $eq
, um nur die Elemente zu erhalten, bei denen das Array courses
genau das Array enthält, das wir mit dem Operator $eq
angeben.
Verwenden Sie $match
mit $all
, um übereinstimmende Dokumente in einem Array in MongoDB zu finden
Beispielcode:
db.student_courses.aggregate({
$match:{
courses:{ $all: ['Java', 'Python']}
}
});
Ausgabe:
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Der Operator $all
entspricht dem Operator $and
. Dieser Code ruft alle Dokumente ab, in denen das Array courses
alle angegebenen Elemente für den Operator $all
enthält.
Die resultierenden Dokumente müssen Java
- und Python
-Elemente enthalten.