测试后在猫鼬中删除所有连接的数据库

Posted

技术标签:

【中文标题】测试后在猫鼬中删除所有连接的数据库【英文标题】:Dropping all connected databases in mongoose after testing 【发布时间】:2017-09-07 13:07:12 【问题描述】:

我目前正在设计一个测试环境,我需要在测试全部完成后重置所有连接的 mongodb 数据库(在所有测试用例中......)。

Code Here

现在我尝试了以下,

Mongoose.js: remove collection or DB

drop database with mongoose

我仍然无法让它工作。

那么除了放弃我还能做什么?

【问题讨论】:

你试过connections.db1.dropDatabase(); 是的,我也试过了,但第二个数据库 db2 仍然完全删除。 我猜你的问题在于多个连接。当您连接到第一个 db1 时,db1 是实时连接,当您连接到 db2 时,您的实时连接切换到 db2 而不是 db1。所以它只是删除 db2。 为了确认上述问题,像你之前那样连接两个dbs,尝试先删除db2,然后再次尝试连接db1,现在删除db1。 你的意思是,`await connections.db2.dropDatabase();等待连接.d1.dropDatabase()`?这样 db1 仍然没有完全删除。但我注意到 users collection 保留了它的结构,但根本没有记录。 【参考方案1】:

添加了保证,仅在成功连接时删除数据库。

My Answer

【讨论】:

【参考方案2】:

作为一种替代方法,Mongoose 确实为默认实例上的新实例导出构造函数。所以这样的事情是可能的。

var Mongoose = require('mongoose').Mongoose;

var instance1 = new Mongoose();
instance1.connect('foo');`

var instance2 = new Mongoose();
instance2.connect('bar');

这在处理单独的数据源时非常有用,并且当您希望为每个用户或请求拥有单独的数据库上下文时也是如此。您需要小心,因为这样做时可能会创建很多连接。确保在不需要实例时调用 disconnect(),并限制每个实例创建的池大小。

【讨论】:

以上是关于测试后在猫鼬中删除所有连接的数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬中进行原始 mongodb 操作?

在猫鼬中删除子文档

Model.find() 在猫鼬中返回空 [重复]

Model.find() 在猫鼬中返回空 [重复]

在猫鼬中执行 CRUD 操作时异步/等待

如何在 FindById 中进行循环,然后在猫鼬中发送响应?