24

我读到猫鼬每个集合最多只会打开一个连接,并且没有选项可以更改它。

这是否意味着缓慢的 mongo 查询会使所有后续查询等待?

我知道 node.js 中的所有内容都是非阻塞的,但我想知道慢速查询是否会延迟所有后续查询的执行。以及是否有办法改变这一点。

4

1 回答 1

31

如果您使用执行 mongoose.connect() 的默认方法,它只使用一个连接。为了解决这个问题,您可以创建多个连接,然后将指向相同模式的模型绑定到该连接。

像这样:

var conn = mongoose.createConnection('mongodb://localhost/test');
var conn2 = mongoose.createConnection('mongodb://localhost/test');
var model1 = conn.model('Model', Schema);
var model2 = conn2.model('Model', Schema);
model1.find({long query}, function() {
   console.log("this will print out last");
});
model2.find({short query}, function() {
   console.log("this will print out first");
});

希望有帮助。

更新 嘿,这确实有效。从评论更新,您可以使用 createConnection 创建连接池。它允许您同时从同一模型执行多个查询:

var conn = mongoose.createConnection('mongodb://localhost/test', {server:{poolSize:2}});
var model = conn.model('Model', Schema);
model.find({long query}, function() {
   console.log("this will print out last");
});
model.find({short query}, function() {
   console.log("this will print out first");
});

更新 2——2012 年 12 月
这个答案现在可能有点过时了——我注意到我一直在继续获得支持,所以我想我会更新它。mongoose 包装的 mongodb-native 驱动程序现在默认连接池大小为 5,因此您可能不需要在 mongoose 中显式指定它。

于 2012-04-06T06:17:20.910 回答