将 Mongoose ODM 与 MongoDB 实例结合使用,如何删除数据库实例所有集合中的所有文档,而不必破坏集合本身或其索引?
对比:
await mongoose.connection.db.dropDatabase();
Deletes the given database, including all collections, documents, and indexes.
根据Mongoose docs ,这是不希望的。
最佳答案
迭代数据库中由 Connection.prototype.collections
的值给出的所有集合。哈希,并使用 Query.prototype.deleteMany()
删除集合中的每个文档。
deleteMany()
查询/操作是异步的(它返回 Query
类似 Promise 的对象)。为了迭代地执行所有集合的操作,我们可以将每个集合映射到带有异步回调的 Promise,在异步回调中我们等待
调用,并使用 Promise.all
当所有查询都解决后才能解决。
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
}));
}
关于javascript - 如何删除Mongoose中所有集合的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70705744/