Coincidencia agregada de MongoDB en un array

Mehvish Ashiq 16 febrero 2024
  1. Coincidencia agregada de MongoDB en un array
  2. Use $match con $in para buscar documentos coincidentes en un array en MongoDB
  3. Use $match con $eq para encontrar documentos coincidentes en un array en MongoDB
  4. Use $match con $all para encontrar documentos coincidentes en un array en MongoDB
Coincidencia agregada de MongoDB en un array

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.

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

Artículo relacionado - MongoDB Match