简体   繁体   中英

How to delete all documents of all collections in Mongoose

Using the Mongoose ODM with a MongoDB instance, how can one delete all documents in all collections of the database instance, without necessarily destroying the collections themselves or their indexes?

For contrast:

await mongoose.connection.db.dropDatabase();

Deletes the given database, including all collections, documents, and indexes.

according to the Mongoose docs , which is not desired.

Iterate over all collections in the database given by the values of the Connection.prototype.collections hash, and use Query.prototype.deleteMany() to delete every document in the collection.

The deleteMany() query/operation is asynchronous (it returns a Query promise-like object). In order to iteratively perform the operations for all collections, we can map each collection to a promise with an asynchronous callback in which we await the call, and use Promise.all to resolve when all of the queries have resolved.

async function clearCollections() {
  const collections = mongoose.connection.collections;

  await Promise.all(Object.values(collections).map(async (collection) => {
      await collection.deleteMany({}); // an empty mongodb selector object ({}) must be passed as the filter argument
  }));
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM