是否可以使用mongoose.js删除集合或整个数据库?
答案 0 :(得分:57)
是的,虽然您是通过本机MongoDB驱动程序而不是Mongoose本身执行的。假设必需的,已连接的mongoose
变量,可以通过mongoose.connection.db
访问原生Db
对象,该对象提供dropCollection
和dropDatabase
方法。
// 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();
答案 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()
})