与find()
相比,我对findOne()mongoose查询的查询时间长得非常长var batchSize = 25;
var cursor = collection1.find().lean().cursor({batchSize: batchSize});
cursor.on('data', function(col1rec){
var parm1 = col1rec.parm1;
var parm2 = col1rec.parm2;
collection2.findOne({parm1:parm1}, function(err, col2rec){
collection3.findOne({parm2:parm2}, function(err, col3rec){
var linkRec = Object.assign({}, col1rec, col2rec, col3red);
new Collection4(linkRec).save();
});
});
});
用例:链接来自不同馆藏的记录。
collection2有parm1有索引,而Collection3有parm2有索引。
要监控我使用mongotop的数据库平均查询次数。产生以下输出:
ns total read write 2017-11-29T17:12:50Z
Collection3 56ms 56ms 0ms
Collection4 56ms 0ms 56ms
Collection2 54ms 54ms 0ms
Collection1 2ms 2ms 0ms
Collection2和Collection3中的findOne如何在Collection1中花费大约50毫秒,光标迭代只需要2ms?
这真的加起来,最后我得到了很长的处理时间。我做错了什么以及如何降低findOne查询时间?
此外,如果不是将findOne嵌套在游标中并循环遍历集合,如果我尝试仅通过参数链接1条记录,则findOne需要~1 ms。
在游标中嵌套mongoose查询不是一个好的策略吗?