Este es mi conjunto de datos de MongoDB Collection:
{ "_id": "60c0ace96e93993880efd337", "lv": [ uid: 1, "createdate": "2021-12-15T12:30:01.935Z", "updatedAt": [ "2021-12-15T12:31:11.635Z", "2021-12-15T12:31:51.955Z", "2021-12-16T12:30:01.935Z", "2021-12-16T12:30:01.935Z", "2021-12-17T12:30:01.935Z", "2021-12-18T12:30:01.935Z" ] ] }, { ... }Quiero filtrar solo los datos cuyo rango de fechas se encuentra en la columna de fecha de creación o en la columna de actualización.
No soy capaz de obtener el resultado deseado. No tener la idea de dónde estoy cometiendo el error en la consulta o coed.
Lo que he probado lo mencionaré aquí.
let startA = new Date("2021-12-14"); const a = new Date(startA.setHours(startA.getHours() - 5)); const start = new Date(a.setMinutes(startA.getMinutes() - 30)); let endA = new Date("2021-12-17"); const b = new Date(endA.setHours(endA.getHours() - 5)); const end = new Date(b.setMinutes(endA.getMinutes() - 30)); const fetchData = await MyCollection.findOne( { _id: ObjectId(req.body.id), 'lv.createdate': { $gte: start, $lt: end }, 'lv.updatedAt': { $elemMatch: { $gte: start, $lt: end } } } ).lean().exec();Cualquier ayuda o sugerencia es realmente apreciada. Gracias de antemano por la interacción.
Sus datos de entrada no son válidos. Con algunas suposiciones, la solución podría ser esta:
db.MyCollection.aggregate([ { $set: { lv: { $map: { input: "$lv", as: "lv", in: { $filter: { input: "$$lv.updatedAt", cond: { $and: [ { $gte: ["$$this", start] }, { $lt: ["$$this", end] } ] } } } } } } } ])o este:
db.MyCollection.aggregate([ { $set: { "lv.updatedAt": { $filter: { input: "$lv.updatedAt", cond: { $and: [ { $gte: ["$$this", start] }, { $lt: ["$$this", end] } ] } } } } } ])