MongoDB Aggregate Match in einem Array

Mehvish Ashiq 16 Februar 2024
  1. MongoDB Aggregate Match in einem Array
  2. Verwenden Sie $match mit $in um übereinstimmende Dokumente in einem Array in MongoDB zu finden
  3. Verwenden Sie $match mit $eq, um übereinstimmende Dokumente in einem Array in MongoDB zu finden
  4. Verwenden Sie $match mit $all, um übereinstimmende Dokumente in einem Array in MongoDB zu finden
MongoDB Aggregate Match in einem Array

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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MongoDB Match