我在一个不打算连续运行的脚本中使用mongoose,我面临着一个看似非常简单的问题,但我却找不到答案;简单地说,一旦我调用了任何向mongodb发送请求的mongoose函数,我的nodejs示例就不会停止,我必须手动终止它,比如说,使用Ctrl + c或Program.exit()。
代码大致如下所示:
var mongoose = require('mongoose');
// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb');
// define some models
// if I include this line for example, node never stop afterwards
var MyModel = mongoose.model('MyModel', MySchema);
我试着添加对mongoose. disconnect()的调用,但没有结果。除此之外,一切正常(查找,保存,...)。
这和这个人的问题完全一样,遗憾的是他没有得到任何回答:https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
谢啦,谢啦
编辑:接受下面的答案,因为它在技术上是正确的,但如果有人再次遇到这个问题,似乎mongoose和/或mongodb驱动程序并没有实际关闭连接时,你问它是否还有查询运行。
它甚至根本不记得断开连接调用,一旦查询运行完毕,它就不执行该操作;它只是丢弃你的调用,没有抛出异常或类似的任何东西,而且从来没有真正关闭连接。
所以你有它:如果你想让disconnect()真正起作用的话,请确保在调用disconnect()之前每个查询都已经被处理过了。
8条答案
按热度按时间yxyvkwin1#
您可以使用以下命令关闭连接
rqdpfwrv2#
另一个答案对我不起作用,我不得不使用
mongoose.disconnect();
,正如this answer中所述。of1yzvn43#
您可以设置与变量的连接,然后在完成后断开连接:
8qgya5xd4#
正如杰克·威尔逊所说:您可以设置与变量的连接,然后在完成后断开连接:
或者如果在异步函数内:
否则,当我在我的环境中检查它时,它有一个错误。
dpiehjr45#
这将关闭mongoose连接,并在控制台中通过消息通知您。
cclgggtu6#
如果你试图在方法外关闭/断开连接,你会得到一个错误。最好的解决方案是在方法的两个回调中关闭连接。伪代码在这里。
rks48beu7#
我使用的是4.4.2版本,其他的答案对我都不起作用,但是将
useMongoClient
添加到选项中,并将其放入一个变量中,您可以在该变量上调用close
。57hvy0tb8#
可能你有这个:
但你也可以这样做
你不能调用
db.disconnect()
但是你可以在使用后关闭连接.