robomongo restaurar query example datos mongodb

mongodb - restaurar - ¿Cómo puedo usar mongodump para volcar los registros que coinciden con un rango de fechas específico?



mongorestore windows (6)

En MongoDB 3.2, podemos usar la opción --queryFile con mongodump.

antes que nada, crea un archivo json:

//query.json {"serverTime": {"$gte": ISODate("2016-01-30T16:00:00.000Z"), "$lt": ISODate("2016-01-31T16:00:00.000Z")}}

luego, usa mongodump:

mongodump --db <dbName> --collection <collectionName> --queryFile query.json

simple y claro.

Intento usar el comando mongodump para descargar un grupo de registros creados en una fecha específica. Los registros incluyen un campo "ts" que es un objeto MongoDB Date ().

mongodump toma un argumento -q que se puede usar para ejecutar una consulta para seleccionar los registros que se incluirán en el volcado. Desafortunadamente, el argumento -q necesita ser provisto en JSON, y no está claro cómo expresar una consulta "menos que esta fecha, más que esta fecha" en JSON puro (normalmente tales consultas usarían un '' new Date () ''constructor) "

¿Algun consejo? Intenté usar el formato {$ date: unix-timestamp-in-miliseconds} pero no funciona para mí.


Esto debería funcionar, ¿qué no funcionó con tu consulta de $ date? :

mongodump --query {"ts":{$gt:{$date:178929000}}}


Lo resolví: el hechizo mágico que estaba buscando es:

mongodump --query "{/"ts/":{/"/$gt/":{/"/$date/":`date -d 2011-08-10 +%s`000},/"/$lte/":{/"/$date/":`date -d 2011-08-11 +%s`000}}}"


Una versión más humana que la versión escapada de @ SimonWillison:

--query "{ time: { /$gt: new Date(1312959600000), /$lt: new Date(1313046000000) }}"

(Tenga en cuenta que aún se deben escapar los dólares).

Obtuve las marcas de tiempo de milisegundos creando fechas en el shell, por ejemplo:

> var targetDateStart = new Date(2011, 7, 10); > var targetDateEnd = new Date(2011, 7, 11); > targetDateStart.getTime(); 1312959600000 > targetDateEnd.getTime(); 1313046000000


use comillas simples alrededor de la consulta. Descubrí que ISODate () no funciona.

mongodump --query ''{"ts":{$gt:{$date:178929000}}}''


Editar: errores corregidos

Agregar una actualización:

  1. mongodump --query no es compatible con IsoDate , pero acepta la Date en milisegundos.

  2. Como el comando date comporta diferente en OS X, la date -d 2011-08-10 +%s no funciona para mí. Si te encuentras con el mismo problema, intenta leer el manual o usa esto:

    • Obtenga la hora actual en segundos:

      date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

    • Obtenga tiempo específico en segundos:

      date -j -f "%Y-%m-%d %H:%M:%S" "2014-01-01 00:00:00" "+%s"

  3. Utilice la versión de presupuesto único para evitar el escape.

    mongodump --query ''{updated_at: { $gte: Date(1403280000000) } }''