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

99
Vistas
Cómo encontrar un objeto específico de una matriz en MongoDB

Supongamos que tengo este documento MongoDB:

 { "_id": { "$oid": "628f739398580cae9c21b44f" }, "place":"Amsterdam", "events": [ { "eventName": "Event one", "eventText": "Event", "eventDate": "010101" "host":"Bob" }, { "eventName": "E2", "eventText": "e2", "eventDate": "020202" "host":"John" } ] } { "_id": { "$oid": "628f739398580cae9c21b44f" }, "place":"London", "events": [ { "eventName": "e3", "eventText": "e3", "eventDate": "010101", "host":"Bob" } ] }

Y quiero obtener el bloque de matriz de eventos organizado por Bob, ¿cómo lo haría? He intentado usar $elemSelector así:

 const result = await mongoDatabase .collection("temp") .find({ events: { $elemMatch: { eventName: "E2" } } }) .toArray(); console.log(JSON.stringify({ result }));

Pero simplemente devuelve todos los eventos en el mismo lugar que el seleccionado, Amsterdam en este caso.

Resultado buscado:

 { "eventName": "Event one", "eventText": "Event", "eventDate": "010101" "host":"Bob" }, { "eventName": "e3", "eventText": "e3", "eventDate": "010101", "host":"Bob" }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Mira esto

 db.collection.aggregate({ $unwind: "$events" }, { $match: { "events.host": "Bob" } }, { "$project": { "events": 1, "_id": 0 } }, { "$replaceRoot": { "newRoot": "$events" } })

Y puedes jugar con más datos de prueba aquí: https://mongoplayground.net/p/A1UbZdZgZmr

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede lograrlo con etapas simples de canalización

 db.collection.aggregate([ { "$match": {//Match "events.host": "Bob" } }, { "$project": { "e": { "$filter": {//Filter matching elements "input": "$events", "as": "event", "cond": { "$eq": [ "$$event.host", "Bob" ] } } } } } ])

Patio de juegos

about 4 years ago · Juan Pablo Isaza Denunciar

0

La siguiente estructura se puede lograr mediante el uso de consultas de proyección en MongoDB, una solución lúcida para lo anterior puede ser esta

 db.collection("temp").find({ "events":{ $elemMatch:{ "eventName":"e3" } } }, {"events":1,"_id":0})
about 4 years ago · Juan Pablo Isaza 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