MongoDB toArray性能

时间:2017-12-06 18:43:57

标签: node.js mongodb toarray

我试图从Mongo / Node中的术语集合构建一个类别树,但首先我使用$ in选择所有树元素:

console.time('termsCol.find');
var terms = await termsCol.find({term_id: {'$in': flatTree}});
console.timeEnd('termsCol.find');

console.time('termsCol.toArray');
terms = await terms.toArray();
console.timeEnd('termsCol.toArray');

执行:

termsCol.find: 0.162ms
termsCol.toArray: 30.910ms

我已经阅读了有关SO上的播放效果的帖子,但想知道是否有任何更改,因为这会占用我在页面请求期间的大部分时间。
我有一个关于该集合的索引,它在~0.15ms内返回300个术语,但是当我需要再等30ms才能在js中进一步使用该数据时,这对我没有帮助。
如果没有办法改善这种对业务的影响,我可能会创建一个缓存集合并在那里存储完整的术语树(希望它们适合16MB)。

1 个答案:

答案 0 :(得分:6)

参考http://mongodb.github.io/node-mongodb-native/2.0/tutorials/streams/ 您可以逐个传输结果,并可以生成一组ID。

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
    console.log("Connected correctly to server");
 var col = db.collection('terms');
    var ids = []
    var findCursor = col.find({term_id: {'$in': flatTree}});
    findCursor.on("data", function(data) {
       ids.push(data._id)
    });
    findCursor.on("end", function(data) {
      // let's finish
      console.log(ids)
    }); 
}); 

我没有检查时间,但确定它应该少于(termsCol.find:0.162ms + termsCol.toArray:30.910ms)