university tutorial example descargar caracteristicas mongodb

mongodb - tutorial - ¿Es posible mongodump los últimos "x" registros de una colección?



mongodb university (6)

¿Se puede usar mongodump para volcar los últimos documentos "x" de una colección? Por ejemplo, en el shell mongo puedes ejecutar:

db.stats.find().sort({$natural:-1}).limit(10);

¿Está esta misma capacidad disponible para mongodump?

Supongo que la solución alternativa sería volcar los documentos anteriores en una nueva colección temporal y mongodump la colección temporal completa, pero sería genial poder hacerlo a través de mongodump.

Gracias por adelantado,

Miguel


Aprovechando la respuesta de Mic92, para obtener los 1000 artículos más recientes de una colección:

Encuentra el _id del artículo 1000 más reciente:

db.collection.find('''', {''_id'':1}).sort({_id:-1}).skip(1000).limit(1)

Será algo así como 50ad7bce1a3e927d690385ec .

Luego pase este _id en una consulta a mongodump:

$ mongodump -d ''your_database'' -c ''your_collection'' -q ''{_id: {$gt: ObjectId("50ad7bce1a3e927d690385ec")}}''


Estaba jugando con un requisito similar (usando mongodump) donde quería hacer una copia de seguridad secuencial y restaurar. Tomaría volcado de la última marca de tiempo almacenada. No pude pasar --query ''{TIMESTAMP: {$ gte: $ stime, $ lt: $ etime}}''

Algunos puntos a tener en cuenta: 1) usar comillas simples en lugar de dobles 2) no escapar $ o nada 3) reemplazar $ stime / $ etime con números reales hará que la consulta funcione 4) el problema que tuve fue con $ stime / $ etime resuelto antes de que mongodump se ejecute bajo -x, se muestra como + eval mongodump --query ''{TIMESTAMP: {/ $ gte: $ utc_stime, / $ lt: $ utc_etime}}'' ++ mongodump --query ''{TIMESTAMP: $ gte : 1366700243} '''' {TIMESTAMP: $ lt: 1366700253} ''

Demonios, el problema era evidente. consulta se convierte en dos condicionales.

La solución es difícil y la obtuve después de varias pruebas ... escape {y} es decir, use {..}. Esto soluciona el problema.


La función find () tiene un segundo parámetro opcional, que especifica qué claves se devolverán. El operador especial "$ slice" se puede usar para devolver un subconjunto de elementos para una clave de matriz.

Por ejemplo, si queremos devolver los primeros 10 comentarios en una colección de blogs (por ejemplo), podemos hacer esto:

db.blog.posts.find(criteria, {"comments" : {"$slice" : 10}})

Alternativamente, si queremos devolver los últimos 10 comentarios, podríamos usar -10:

db.blog.posts.find(criteria, {"comments" : {"$slice" : -10}})

Espero que esto te sea útil.

Buena suerte !


prueba esto:

NUM=10000 doc=selected_doc taskid=$(mongo 127.0.0.1/selected_db -u username -p password --eval "db.${doc}.find({}, {_id: 1}).sort({_id: -1}).skip($NUM).limit(1)" | grep -E -o ''"[0-9a-f]+"'') mongodump --collection $doc --db selected_db --host 127.0.0.1 -u username -p password -q "{_id: {/$gte: $taskid}}" --out ${doc}.dump


mongodump es compatible con el operador --query . Si puede especificar su consulta como una consulta json, debería poder hacer precisamente eso.

Si no, entonces su truco de ejecutar una consulta para volcar los registros en una recopilación temporal y luego deshacerse de eso funcionará bien. En este caso, podría automatizar el volcado utilizando un script de shell que llame a un mongo con un comando javascript para hacer lo que quiera y luego llamar a mongodump.


mongodump no expone completamente las interfaces del cursor. Pero puede --query usando el parámetro --query . Primero obtenga el número total de documentos de la colección.

db.collection.count()

Digamos que hay 10000 documentos y desea los últimos 1000. Para ello, obtenga el ID del primer documento que desea volcar.

db.collection.find().sort({_id:1}).skip(10000 - 1000).limit(1)

En este ejemplo, el ID fue "50ad7bce1a3e927d690385ec" . Ahora puede alimentar a mongodump con esta información, para volcar todos los documentos a con id superior o igual.

$ mongodump -d ''your_database'' -c ''your_collection'' -q ''{_id: {$gte: ObjectId("50ad7bce1a3e927d690385ec")}}''

ACTUALIZACIÓN Los nuevos parámetros --limit y --skip se agregaron a mongoexport probablemente estarán disponibles en la próxima versión de la herramienta: https://github.com/mongodb/mongo/pull/307