Mongoose.js:删除集合或DB

WHI*_*LOR 45 mongoose

是否可以使用mongoose.js删除集合或整个数据库?

Joh*_*yHK 68

是的,虽然你是通过本机MongoDB驱动程序而不是Mongoose本身完成的.假设一个必需的,连接的mongoose变量,本机Db对象可以通过mongoose.connection.db,该对象提供dropCollectiondropDatabase方法.

// Drop the 'foo' collection from the current database
mongoose.connection.db.dropCollection('foo', function(err, result) {...});

// Drop the current database
mongoose.connection.db.dropDatabase(function(err, result) {...});
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这些方法也返回承诺,因此您可以执行诸如`await mongoose.connection.db.dropCollection('foo');` 之类的操作,而不是在回调中挣扎 (5认同)

Dav*_*lsh 51

现在可以在Mongoose中完成.

MyModel.collection.drop();
Run Code Online (Sandbox Code Playgroud)

帽子提示:https://github.com/Automattic/mongoose/issues/4511

  • @JohnK:`等待 MyModel.collection.drop();`。更有趣的问题是,如何仅在集合存在时才删除?否则,你会得到一个误导性且神秘的 [`MongoError: ns not find`](/sf/ask/2599534311/#评论99306970_44488227)。 (3认同)

ada*_*amc 7

对于那些使用mochajs测试框架并希望在每次测试后清理所有数据库集合的人,可以使用以下使用async/await:

afterEach(async function () {
  const collections = await mongoose.connection.db.collections()

  for (let collection of collections) {
    await collection.remove()
  }
})
Run Code Online (Sandbox Code Playgroud)