Hay 4 registros en mi base de datos.
{"_id":{"$oid":"6200b15e91f762376cd43ac3"},"startDate":{"$date":"2021-01-01T00:00:00.000Z"},"endDate":{"$date":"2021-01-28T18:29:59.059Z"},"__v":0} {"_id":{"$oid":"6200b15e91f762376cd43ac4"},"startDate":{"$date":"2021-01-01T00:00:00.000Z"},"endDate":{"$date":"2021-01-23T18:29:59.059Z"},"__v":0} {"_id":{"$oid":"6200b15e91f762376cd43ac5"},"startDate":{"$date":"2021-01-05T00:00:00.000Z"},"endDate":{"$date":"2021-01-28T18:29:59.059Z"},"__v":0} {"_id":{"$oid":"6200b15e91f762376cd43ac6"},"startDate":{"$date":"2021-01-05T00:00:00.000Z"},"endDate":{"$date":"2021-01-25T18:29:59.059Z"},"__v":0}Mi interfaz de usuario se ve así:
Mi consulta mongodb es la siguiente: (lo que he intentado)
data.find({ "$or": [ {"startDate": {"$gte": startDate}}, {"endDate": {"$lte": endDate}} ] }); Cuando busco con la consulta anterior, obtengo solo 1 registro, es decir: {"_id":{"$oid":"6200b15e91f762376cd43ac3"},"startDate":{"$date":"2021-01-01T00:00:00.000Z"},"endDate":{"$date":"2021-01-28T18:29:59.059Z"},"__v":0} en lugar de los 4.
Mientras envío desde la interfaz de usuario, lo convierto es: req.query :
dateStart: '2021-01-01', dateEnd: '2021-01-28', Y luego conviértalo al new Date() :
let startDate = new Date(req.query.dateStart); let endDate = new Date(req.query.dateEnd);No sé en qué me equivoco en la consulta. ¡Necesitas ayuda! ¡Gracias!
Con $ y parece funcionar como se esperaba:
db.collection.aggregate([ { $match: { startDate: { $gte: { "$date": "2021-01-01T00:00:00.000Z" } }, endDate: { $lte: { "$date": "2021-01-28T00:00:00.000Z" } } } } ])Dado que espera que se devuelvan los 4 registros, para la fecha de finalización debe consultar utilizando el tiempo antes de que finalice la fecha 2021-01-28 , que es 2021-01-28T23:59:59.999Z en lugar de cuando comienza la fecha que es 2021-01-28T00:00:00.000Z .
Aquí hay un recurso sobre el formato de marcas de tiempo .
Así que una consulta como esta funcionaría:
db.collection.find({ startDate: { $gte: { "$date": "2021-01-01T00:00:00.000Z" } }, endDate: { $lte: { "$date": "2021-01-28T23:59:59.999Z" } } })