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

136
Vistas
Agregación de MongoDB: colecciones de consultas que satisfacen toda la matriz de objetos, no al menos uno

Tengo colecciones que tienen fechas en una matriz como:

 datesArray: [{ start_date: Date, end_date: Date }]

Solo quiero aquellas colecciones que satisfagan todos los elementos de datesArray.

Lo estoy usando en el operador de agregación $match como:

 Model.aggregate([ { $match: { 'datesArray.start_date': { $gte: new Date('11-01-21') }, 'datesArray.end_date': { $lte: new Date('11-30-21') } } } ])

Probé con $elemMatch pero coincide con al menos un elemento de matriz. También probé $all con $elemMatch pero no tuve éxito.

Gracias

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

$map asigne su datesArray de fechas a una matriz booleana según los criterios de coincidencia de su rango de fechas. Realice $allElementsTrue en el resultado para obtener el resultado deseado.

inputDate1 y inputDate2 son sus entradas. Siéntete libre de actualizarlos.

 db.collection.aggregate([ { "$addFields": { "inputDate1": ISODate("2021-01-01"), "inputDate2": ISODate("2021-12-31") } }, { "$match": { $expr: { "$allElementsTrue": [ { "$map": { "input": "$datesArray", "as": "d", "in": { $and: [ { $gte: [ "$$d.start_date", "$inputDate1" ] }, { $lte: [ "$$d.end_date", "$inputDate2" ] } ] } } } ] } } } ])

Aquí está el parque infantil de Mongo para su referencia.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Simplemente podría invertir cada uno de los criterios y usar $nor :

 db.collection.aggregate([ {$match: { $nor: [ {"datesArray.start_date": {$lt: ISODate("2021-11-01")}}, {"datesArray.end_date": {$gt: ISODate("2021-11-30")}} ] }} ])
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