【问题标题】:MongoDB toArray performanceMongoDB toArray 性能
【发布时间】:2017-12-06 18:43:57
【问题描述】:

我正在尝试从 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 上 toArray 性能的帖子,但想知道是否有任何变化,因为这需要我在页面请求期间的大部分时间。
我对该集合有一个索引,它在 ~0.15 毫秒内返回 300 个术语,但是当我必须再等 30 毫秒才能在 js 中进一步使用该数据时,这对我没有帮助。
如果没有办法改进这个 toArray 业务,我可能会创建一个缓存集合并将完整的术语树存储在那里(希望它们适合 16MB)。

【问题讨论】:

    标签: node.js mongodb toarray


    【解决方案1】:

    参考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)

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      相关资源
      最近更新 更多