Mongoose.js:删除集合或数据库
是否可以使用mongoose.js删除集合或整个数据库?可以,尽管您是通过本机MongoDB驱动程序而不是mongoose本身来完成的。假设有一个必需的、已连接的Mongoose.js:删除集合或数据库,mongoose,Mongoose,是否可以使用mongoose.js删除集合或整个数据库?可以,尽管您是通过本机MongoDB驱动程序而不是mongoose本身来完成的。假设有一个必需的、已连接的mongoose变量,则可以通过mongoose.connection.db访问本机对象,该对象提供了 //从当前数据库中删除“foo”集合 mongoose.connection.db.dropCollection('foo',函数(err,result){…}); //删除当前数据库 mongoose.connection.db.d
mongoose
变量,则可以通过mongoose.connection.db
访问本机对象,该对象提供了
//从当前数据库中删除“foo”集合
mongoose.connection.db.dropCollection('foo',函数(err,result){…});
//删除当前数据库
mongoose.connection.db.dropDatabase(函数(err,result){…});
Mongoose引用了每个型号上的连接。因此,您可能会发现删除单个模型的DB或集合也很有用
例如:
// 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) {...});
这可以在猫鼬身上实现
MyModel.collection.drop();
帽子提示:对于使用测试框架并希望在每次测试后清理所有db集合的用户,可以使用以下使用async/await的方法:
afterEach(async function () {
const collections = await mongoose.connection.db.collections()
for (let collection of collections) {
await collection.remove()
}
})
对于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();
}
});
如果要在测试之后删除集合,并且您的测试正在
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()
})
请注意,这些方法也会返回承诺,因此您可以执行类似
wait mongoose.connection.db.dropCollection('foo')代码>有没有一种方法可以通过承诺做到这一点,而不是与回调抗争?@JohnK:等待MyModel.collection.drop()代码>。更有趣的问题是,如何仅在集合存在时删除?否则,您将得到一个误导性的、含糊不清的结果。@DanDascalescu您可以捕获承诺返回的错误<代码>等待MyModel.collection.drop().然后(()=>{…}).catch(()=>{…})