Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

220
Vistas
consulta $elemMatch en MongoDB

Tengo una colección 'nombre' con 2 documentos de la estructura:

documento 1:

 { a: 1 b : [{name:"AAA",age:10}, {name:"BBB",age:12}, {name:"CCC",age:13}] }

documento 2:

 { a: 2 b : [{name:"DDD",age:14}, {name:"EEE",age:15}, {name:"FFF",age:16}] }

Como soy nuevo en MongoDB, estoy tratando de encontrar la diferencia entre usar el operador $elemMatch y no usarlo. Básicamente, estoy tratando de consultar y encontrar el primer documento (documento 1) con el nombre AAA y 10 años. Entonces, al usar $ elemMatch, mi consulta se ve así:

 db.name.find({b: {$elemMatch :{name:"AAA",age:10}}})

Esta consulta funciona perfectamente bien, pero mi pregunta es cuál es la necesidad de usar esta consulta cuando puedo consultar así:

 db.name.find({b:{name:"AAA",age:10}})

Estoy seguro de que debería haber alguna razón para $elemMatch, solo trato de encontrar la diferencia. Gracias de antemano por la respuesta !!!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La diferencia clave es que la segunda consulta (sin $elemMatch ) solo coincidiría con los elementos de la matriz b que solo contenían esos dos campos, y solo en ese orden.

Entonces, la primera consulta coincidiría con los siguientes dos documentos, pero la segunda consulta no:

 { a: 1 b: [{name: "AAA", age: 10, city: 'New York'}, {name: "BBB", age: 12, city: 'Paris'}, {name: "CCC", age: 13, city: 'London'}] } { a: 1, b: [{age: 10, name: "AAA"}, {name: "BBB", age: 12}, {name: "CCC", age: 13}] }
over 4 years ago · Santiago Trujillo Denunciar

0

Otra diferencia importante es cómo Mongo usa los índices .

Si hemos declarado un índice multiclave-compuesto:

 db.name.createIndex({ "b.name": 1, "b.age": 1 })

Y ejecutamos esto:

 db.name.explain().find({ b: { name: "DDD", age: 14 } })

obtenemos:

 "winningPlan" : { "stage" : "COLLSCAN",

Si ejecutamos esto:

 db.name.explain().find({ b: { $elemMatch: { name: "DDD", age: 14 } } })

obtenemos:

 "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN",

Pero si tenemos un índice simple de múltiples claves en la matriz:

 db.name.createIndex({b: 1})

El índice anterior se utilizará en esta consulta:

 db.name.explain().find({ b: { name: "DDD", age: 14 } })

Y bajo mis pruebas de perfilado muy poco profesionales, parece que esto es más rápido.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda