MongoDB Aggregate Match in einem Array
- MongoDB Aggregate Match in einem Array
-
Verwenden Sie
$matchmit$inum übereinstimmende Dokumente in einem Array in MongoDB zu finden -
Verwenden Sie
$matchmit$eq, um übereinstimmende Dokumente in einem Array in MongoDB zu finden -
Verwenden Sie
$matchmit$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.
