Correspondance agrégée MongoDB dans un tableau
- Correspondance agrégée MongoDB dans un tableau
-
Utilisez
$match
avec$in
pour trouver des documents correspondants dans un tableau dans MongoDB -
Utilisez
$match
avec$eq
pour trouver des documents correspondants dans un tableau dans MongoDB -
Utilisez
$match
avec$all
pour 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
.