Mongoose.js:删除集合或DB

时间:2012-07-12 14:05:43

标签: mongoose

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

6 个答案:

答案 0 :(得分:57)

是的,虽然您是通过本机MongoDB驱动程序而不是Mongoose本身执行的。假设必需的,已连接的mongoose变量,可以通过mongoose.connection.db访问原生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) {...});

答案 1 :(得分:45)

现在可以在Mongoose中完成。

MyModel.collection.drop();

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

答案 2 :(得分:7)

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

find . -size 8c -maxdepth 1 -exec cat {} \;

答案 3 :(得分:1)

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

例如:

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

// Drop the current database
User.db.db.dropDatabase(function(err, result) {...});

答案 4 :(得分:0)

对于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(); 
     }
});

答案 5 :(得分:0)

如果要在测试后删除集合并且您的测试在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()
})