Correspondance agrégée MongoDB dans un tableau
- Correspondance agrégée MongoDB dans un tableau
- 
          
            Utilisez $matchavec$inpour trouver des documents correspondants dans un tableau dans MongoDB
- 
          
            Utilisez $matchavec$eqpour trouver des documents correspondants dans un tableau dans MongoDB
- 
          
            Utilisez $matchavec$allpour trouver des documents correspondants dans un tableau dans MongoDB
 
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.
