Coincidencia agregada de MongoDB en un array
- Coincidencia agregada de MongoDB en un array
-
Use
$matchcon$inpara buscar documentos coincidentes en un array en MongoDB -
Use
$matchcon$eqpara encontrar documentos coincidentes en un array en MongoDB -
Use
$matchcon$allpara encontrar documentos coincidentes en un array en MongoDB
Este artículo educa sobre el uso de la coincidencia agregada de MongoDB en un array con la ayuda de ejemplos de código. Exploraremos diferentes ejemplos usando un array de tipo cadena y un array de tipo numérico.
Coincidencia agregada de MongoDB en un array
Ya hemos aprendido a utilizar la etapa de agregación de coincidencias con operadores de comparación, operadores $and/$or y etapas $group/$project. Puede encontrar ese artículo aquí.
Aquí, nos enfocamos en aprender la coincidencia agregada de MongoDB en un array para encontrar documentos coincidentes. Para crear una colección donde al menos un campo contiene un array.
Puede aprovechar los comandos a continuación para seguirnos.
Código de ejemplo:
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();
Producción :
{ "_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 ] }
Use $match con $in para buscar documentos coincidentes en un array en MongoDB
Código de ejemplo:
db.student_courses.aggregate({
$match:{
$expr:{ $in: ['Java', "$courses"]}
}
});
Producción :
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Este fragmento de código usa $match con $expr para permitirnos usar expresiones de agregación dentro de un lenguaje de consulta. Aquí, $expr crea la expresión de consulta que compara los campos de los documentos exactos en la etapa $match.
Además, el operador $in selecciona aquellos documentos en los que la matriz courses contiene Java como elemento de la matriz. Para verificar múltiples valores en la matriz especificada, use la consulta de la siguiente manera.
Código de ejemplo:
db.student_courses.aggregate({
$match:{
courses:{ $in: ['Java', 'Python']}
}
});
Producción :
{ "_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 ] }
Este ejemplo selecciona solo aquellos documentos donde la matriz de courses tiene Java o Python (o ambos). Del mismo modo, podemos trabajar con un array numérica.
Código de ejemplo:
db.student_courses.aggregate({
$match:{
results:{ $in: [3,6]}
}
});
Producción :
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Esta consulta recupera solo aquellos documentos donde la matriz de results contiene 3 o 6 (o ambos).
Código de ejemplo:
db.student_courses.aggregate({
$match:{
$expr:{ $gt: [{$sum: "$results"}, 10]}
}
});
Producción :
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
Aquí, seleccionamos solo aquellos documentos donde la suma de todos los elementos de la matriz results es mayor que 10.
Use $match con $eq para encontrar documentos coincidentes en un array en MongoDB
Código de ejemplo:
db.student_courses.aggregate({
$match:{
courses:{ $eq: ['Java', 'Python']}
}
});
Producción :
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
Aquí, usamos el operador $eq para obtener solo aquellos elementos donde la matriz courses contiene la matriz exacta que especificamos con el operador $eq.
Use $match con $all para encontrar documentos coincidentes en un array en MongoDB
Código de ejemplo:
db.student_courses.aggregate({
$match:{
courses:{ $all: ['Java', 'Python']}
}
});
Producción :
{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
El operador $all es equivalente al operador $and. Este código recupera todos aquellos documentos en los que el array courses contiene todos los elementos especificados para el operador $all.
Los documentos resultantes deben contener elementos Java y Python.
