是否可以使用 mongoose.js 删除集合或整个数据库?
问问题
83303 次
7 回答
98
是的,尽管您是通过本机 MongoDB 驱动程序而不是 Mongoose 本身来完成的。假设一个必需的、连接的、mongoose
变量,本机Db
对象可以通过 访问mongoose.connection.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) {...});
于 2012-07-15T15:51:51.010 回答
91
这现在可以在 Mongoose 中完成。
MyModel.collection.drop();
于 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 回答