Estoy buscando una consulta que encuentre documentos que sean inferiores a la fecha específica y también me dará la fila que tiene una clave de referencia igual a esa identificación
para los siguientes datos (1 colección) y el parámetro de fecha es "01-10-2019" (octubre de 2019): (así que buscará primero solo lte: 01-10-2020
{ { "id": 1, "ref": null, "date": "20-09-2020" (SEP 20) }, { "id": 2, "ref": 1, "date": "today" }, { "id": 3, "ref" null, "date": "today" } } el resultado será : id 1 and 2 , porque 1 cumple con los criterios de fecha y id 2 tiene una clave de referencia igual a id 1 . id 3 no se recibirá porque no cumple con los criterios de fecha
{ { "id": 1, "ref": 2, "date": "one month before" }, { "id": 2, "ref": 1, "date": "today" }, }el problema es que necesito ir por encima de 100-200k filas y cada vez que trabajo en digamos 1000 documentos
¿Cómo puedo hacer eso de una manera eficiente?
Pensé en algo como: 1-
col.find({date:{$lte:given_Date}}2- ejecutar en cada uno de los resultados y encontrar
col.findOne({ref:given_id}}Puedes hacerlo usando aggregation framework
db.collection.aggregate([ { "$addFields": {//Add a field to convert your dates "date1": { "$cond": { "if": { "$eq": [ "$date", "today" ] }, "then": new Date(), "else": { "$toDate": "$date" } } } } }, { "$lookup": {//Join "from": "collection", "localField": "id", "foreignField": "ref", "as": "output" } }, { "$match": {//match condition "date1": { "$lte": ISODate("2020-10-01T00:00:00Z") } } } ])$addFields .