Coincidencia agregada de MongoDB en un array
- Coincidencia agregada de MongoDB en un array
-
Use
$match
con$in
para buscar documentos coincidentes en un array en MongoDB -
Use
$match
con$eq
para encontrar documentos coincidentes en un array en MongoDB -
Use
$match
con$all
para 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
.