68

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

4

7 回答 7

98

是的,尽管您是通过本机 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) {...});
于 2012-07-15T15:51:51.010 回答
91

这现在可以在 Mongoose 中完成。

MyModel.collection.drop();

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

于 2017-01-28T06:21:00.997 回答
10

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

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

  for (let collection of collections) {
    await collection.remove()
  }
})
于 2018-04-28T01:28:28.053 回答
3

Mongoose 引用了每个模型上的连接。因此,您可能会发现从单个模型中删除数据库或集合也很有用。

例如:

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

// Drop the current database
User.db.dropDatabase(function(err, result) {...});
于 2015-10-20T21:58:47.340 回答
2

对于 5.2.15 版本的 Mongoose + Mocha 测试用法,您需要在每次测试之前删除所有集合。

beforeEach(async () => {
     const collections = await mongoose.connection.db.collections();

     for (let collection of collections) {
          // note: collection.remove() has been depreceated.        
          await collection.deleteOne(); 
     }
});
于 2018-09-16T07:53:44.260 回答
1

如果想在测试后删除集合并且您的测试在docker容器中运行:

mongoose = require("mongoose");
...
afterAll(async () => {
  const url = 'mongodb://host.docker.internal:27017/my-base-name';
  await mongoose.connect(url)
  await mongoose.connection.collection('collection-name').drop()
})
于 2019-07-19T14:53:23.430 回答
0

我使用Connection.prototype.dropCollection()删除了我的收藏

const conn = mongoose.createConnection('mongodb://localhost:27017/mydb');
conn.dropCollection("Collection_name",callbacks);
于 2021-09-29T12:16:07.043 回答