query many collection mongodb mongodb-shell

many - mongodb objectid



Mongodb: realizar una consulta de rango de fechas desde el ObjectId en el shell mongo (2)

Puedes hacerlo en 2 pasos:

var objIdMin = ObjectId(Math.floor((new Date(''1990/10/10''))/1000).toString(16) + "000 0000000000000") var objIdMax = ObjectId(Math.floor((new Date(''2011/10/22''))/1000).toString(16) + "000 0000000000000") db.myCollection.find({_id:{$gt: objIdMin, $lt: objIdMax}})

o en un paso (lo que es menos legible):

db.myCollection.find({_id:{$gt: ObjectId(Math.floor((new Date(''1990/10/10''))/1000).toString(16) + "000 0000000000000"), $lt: ObjectId(Math.floor((new Date(''2011/10/10''))/1000).toString(16) + "000 0000000000000")}})

Tengo una colección que se parece a esto:

{ _id: ObjectId("50a68673476427844b000001"), other fields }

Quiero hacer una consulta de rango para encontrar registros entre dos fechas. Sé que puedo obtener la fecha del ObjectId en el mongo shell var haciendo esto:

var aDate = ObjectId().getTimestamp()

pero no hay una manera (por lo que puedo imaginar en este momento) de crear un ObjectId que conste solo de la parte de la marca de tiempo. Creo que mi solución ideal es que el código de shell mongo no funcione sería:

var minDate = ObjectId(new Date("2012-11-10")); var maxDate = ObjectId(new Date("2012-11-17"));

Utilice el hallazgo con minDate y MaxDate como los valores de rango.

¿Hay alguna manera de hacer esto en el SHELL? No estoy interesado en algunos de los productos de controladores.


utilizando mongo shell:

puede utilizar el método incorporado ObjectId.fromDate:

db.mycollection.find({_id:{$gt:ObjectId.fromDate(new Date(''2017-09-23''))}});

Desde el controlador node.js puede usar la solución provista por @jksdua here