Correspondance agrégée MongoDB dans un tableau

Mehvish Ashiq 16 février 2024
  1. Correspondance agrégée MongoDB dans un tableau
  2. Utilisez $match avec $in pour trouver des documents correspondants dans un tableau dans MongoDB
  3. Utilisez $match avec $eq pour trouver des documents correspondants dans un tableau dans MongoDB
  4. Utilisez $match avec $all pour trouver des documents correspondants dans un tableau dans MongoDB
Correspondance agrégée MongoDB dans un tableau

Cet article explique comment utiliser la correspondance agrégée MongoDB dans un tableau à l’aide d’exemples de code. Nous explorerons différents exemples utilisant un tableau de type chaîne et un tableau de type numérique.

Correspondance agrégée MongoDB dans un tableau

Nous avons déjà appris à utiliser l’étape d’agrégation des correspondances avec les opérateurs de comparaison, les opérateurs $and/$or et les étapes $group/$project. Vous pouvez trouver cet article ici.

Ici, nous nous concentrons sur l’apprentissage de la correspondance agrégée MongoDB dans un tableau pour trouver des documents correspondants. Pour créer une collection où au moins un champ contient un tableau.

Vous pouvez profiter des commandes ci-dessous pour suivre avec nous.

Exemple de code :

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();

Production:

{ "_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 ] }

Utilisez $match avec $in pour trouver des documents correspondants dans un tableau dans MongoDB

Exemple de code :

db.student_courses.aggregate({
    $match:{
        $expr:{ $in: ['Java', "$courses"]}
    }
});

Production:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

Cet extrait de code utilise le $match avec $expr pour nous permettre d’utiliser expressions d’agrégation dans un langage de requête. Ici, le $expr construit l’expression de la requête qui compare les champs des documents exacts dans l’étape $match.

De plus, l’opérateur $in sélectionne les documents où le tableau courses contient Java comme élément de tableau. Pour vérifier plusieurs valeurs dans le tableau spécifié, utilisez la requête de la manière suivante.

Exemple de code :

db.student_courses.aggregate({
    $match:{
        courses:{ $in: ['Java', 'Python']}
    }
});

Production:

{ "_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 ] }

Cet exemple sélectionne uniquement les documents où le tableau courses contient soit Java, soit Python (ou les deux). De même, nous pouvons travailler avec un tableau numérique.

Exemple de code :

db.student_courses.aggregate({
    $match:{
        results:{ $in: [3,6]}
    }
});

Production:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

Cette requête ne récupère que les documents dont le tableau results contient soit 3, soit 6 (ou les deux).

Exemple de code :

db.student_courses.aggregate({
    $match:{
       $expr:{ $gt: [{$sum: "$results"}, 10]}
    }
});

Production:

{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }

Ici, nous ne sélectionnons que les documents dont la somme de tous les éléments du tableau results est supérieure à 10.

Utilisez $match avec $eq pour trouver des documents correspondants dans un tableau dans MongoDB

Exemple de code :

db.student_courses.aggregate({
    $match:{
        courses:{ $eq: ['Java', 'Python']}
    }
});

Production:

{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

Ici, nous utilisons l’opérateur $eq pour obtenir uniquement les éléments où le tableau courses contient le tableau exact que nous spécifions avec l’opérateur $eq.

Utilisez $match avec $all pour trouver des documents correspondants dans un tableau dans MongoDB

Exemple de code :

db.student_courses.aggregate({
    $match:{
        courses:{ $all: ['Java', 'Python']}
    }
});

Production:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

L’opérateur $all est équivalent à l’opérateur $and. Ce code récupère tous les documents où le tableau courses contient tous les éléments spécifiés pour l’opérateur $all.

Les documents résultants doivent contenir des éléments Java et Python.

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

Article connexe - MongoDB Match