Cuando quiero eliminar todos los objetos de los comments de mi colección mongoDB, hago esto con este comando:
mongo $MONGODB_URI --eval 'db.comments.deleteMany({});'Sin embargo, esto es muy lento cuando hay millones de registros dentro de la colección.
En una base de datos relacional como Postgres, simplemente copiaría la estructura de la colección, crearía una colección de comments2 , soltaría la colección de comments y cambiaría el nombre de comments2 a comments .
¿Es esto posible de hacer en MongoDB también? ¿O hay algún otro truco para acelerar el progreso?
Gracias, las respuestas inspiraron mi propia solución. Olvidé que MongoDB no tiene un esquema como una base de datos relacional.
Entonces lo que hice es esto:
mongodump --host=127.0.0.1 --port=7001 --db=coral --collection=comments --query='{"id": "doesntexist"}' --out=./dump Esto creará una carpeta ./dump con los contenidos comments.bson (vacío) y comments.metadata.json
comments mongo mongodb://127.0.0.1:7001/coral --eval 'db.comments.drop();'new_comments.json (diferente de comments.bson) mongoimport --uri=mongodb://127.0.0.1:7001/coral --file=new_comments.json --collection comments --numInsertionWorkers 12Esto es mucho más rápido que agregar primero los índices y luego importar.
mongorestore --uri=mongodb://127.0.0.1:7001/coral --dir dump/coral --nsInclude coral.comments --numInsertionWorkersPerCollection 12 Tenga en cuenta que --numInsertionWorkers acelera el proceso al dividir el trabajo en 12 CPU. ¿Cuántos cpus tienes se pueden encontrar en OSx con:
sysctl -n hw.ncpudb.cities.aggregate([{ $match: {} }, { $out: "collection2" }]) en caso de que pueda iniciar sesión en el aviso de mongo y simplemente suelte la colección anterior. De lo contrario, el enfoque que ha publicado es el indicado.
mongoexport.exe /host: /puerto: /db:prueba /colección:colección1 /out:colección1.json mongoimport.exe /host: /puerto: /db:prueba /colección:colección2 /archivo:colección1.json
gracias neha
Para la versión de mongodb> = 4.0, puede hacer esto a través de db.comments.renameCollection ("comments2") , pero es una operación que requiere muchos recursos y para colecciones más grandes es mejor que haga mongodump/mongorestore. Así que los mejores pasos de acción son:
mongodump -dx -c comments -out dump.bson >use x >db.comments.drop() mongorestore -dx -c comments2 dump.bsonPor favor, tenga en cuenta que deleteMany({}) es una operación que requiere aún más recursos, ya que creará una sola entrada de registro para cada documento que elimine y propague a todos los miembros de replicaSet.