many deleteone deletemany delete data collection all mongodb mongodb-.net-driver

deleteone - mongodb show collection data



Truncar una colección (5)

Cree la base de datos y las colecciones y luego haga una copia de seguridad de la base de datos en archivos bson usando mongodump:

mongodump --db database-to-use

Luego, cuando necesite abandonar la base de datos y volver a crear el entorno anterior, solo use mongorestore:

mongorestore --drop

La copia de seguridad se guardará en el directorio de trabajo actual, en una carpeta llamada dump, cuando use el comando mongodump.

¿Cómo trunco ​​una colección en MongoDB o existe tal cosa?

En este momento tengo que eliminar 6 grandes colecciones a la vez y detendré el servidor, borrando los archivos de la base de datos y luego recreando la base de datos y las colecciones en ella. ¿Hay alguna manera de eliminar los datos y dejar la colección tal como está? La operación de eliminación lleva mucho tiempo. Tengo millones de entradas en las colecciones.


No hay equivalente a la operación "truncar" en MongoDB. Puede eliminar todos los documentos, pero tendrá una complejidad de O (n) o eliminará la colección, luego la complejidad será O (1) pero perderá sus índices.


Para truncar una colección y mantener el uso de los índices

db.<collection>.remove({})


Puede eliminar de manera eficiente todos los datos e índices de una colección con db.collection.drop() . Dejar caer una colección con una gran cantidad de documentos y / o índices será significativamente más eficiente que eliminar todos los documentos usando db.collection.remove({}) . El método remove() realiza el mantenimiento extra de actualizar índices a medida que se eliminan documentos, y sería incluso más lento en un entorno de conjunto de réplicas donde el oplog incluiría entradas para cada documento eliminado en lugar de un solo comando de extracción de recopilación.

Ejemplo usando el shell mongo :

var dbName = ''nukeme''; db.getSiblingDB(dbName).getCollectionNames().forEach(function(collName) { // Drop all collections except system ones (indexes/profile) if (!collName.startsWith("system.")) { // Safety hat print("WARNING: going to drop ["+dbName+"."+collName+"] in 5s .. hit Ctrl-C if you''ve changed your mind!"); sleep(5000); db[collName].drop(); } })

Vale la pena señalar que eliminar una colección tiene diferentes resultados en el uso de almacenamiento dependiendo del motor de almacenamiento configurado:

  • WiredTiger (motor de almacenamiento predeterminado en MongoDB 3.2 o posterior) liberará el espacio utilizado por una colección descartada (y cualquier índice asociado) una vez que finalice la eliminación.
  • MMAPv1 (motor de almacenamiento predeterminado en MongoDB 3.0 y versiones anteriores) no liberará el espacio de disco preasignado . Esto puede estar bien para su caso de uso; el espacio libre está disponible para su reutilización cuando se insertan datos nuevos.

Si, en cambio, está abandonando la base de datos, generalmente no necesita crear explícitamente las colecciones, ya que se crearán a medida que se inserten los documentos.

Sin embargo, aquí hay un ejemplo de cómo descartar y volver a crear la base de datos con los mismos nombres de colección en mongo shell:

var dbName = ''nukeme''; // Save the old collection names before dropping the DB var oldNames = db.getSiblingDB(dbName).getCollectionNames(); // Safety hat print("WARNING: going to drop ["+dbName+"] in 5s .. hit Ctrl-C if you''ve changed your mind!") sleep(5000) db.getSiblingDB(dbName).dropDatabase(); // Recreate database with the same collection names oldNames.forEach(function(collName) { db.getSiblingDB(dbName).createCollection(collName); })


la consulta siguiente eliminará todos los registros en una colección y mantendrá la colección como está,

db.collectionname.remove({})