mongoose是否同时允许多个数据库请求?

ale*_*exk 23 mongoose mongodb node.js

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

这是否意味着慢速mongo查询将使所有后续查询等待?

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

Eve*_*man 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");
});
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

更新 嘿,这确实有效.从注释更新,您可以使用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");
});
Run Code Online (Sandbox Code Playgroud)

更新2 - 2012年12月
这个答案现在可能稍微过时了 - 我注意到我一直在继续提升,所以我想我会更新它.mongoose包装的mongodb本机驱动程序现在具有默认连接池大小5,因此您可能不需要在mongoose中明确指定它.

  • 好吧,至少创建一个百万行的测试数据库,然后运行一个在非索引字段上排序的查询.无论如何,这就是我所做的.我已经有了我的日志记录数据(所以我不需要创建一个测试数据库),它有数百万行 - 对我来说,查询的查询量大约为30秒.刚刚在http://wes.skeweredrook.com/testing-with-mongodb-part-1/上发布了一些例子 (2认同)