node.js - MongoDB toArray 性能

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

最佳答案

引用 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.910 毫秒)

关于node.js - MongoDB toArray 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47681370/

相关文章:

node.js - npm:找出哪些依赖项使用给定的包(间接)

node.js - 我应该验证 API 层还是 BL 层的输入?

performance - MongoDB 嵌入式与大数据文档的引用模式

mongodb - 断言 10320 BSONElement : bad type 113 when querying profile collection, db.system.profile.find()

c# - 在 c# 中,Array.ToArray() 执行深度复制吗?

java - 二维 ArrayList 到普通数组 java

Node.js 应用程序无法连接到 MongoDB Atlas 集群

node.js - Sequelize- Try block 不会捕获 model.create() 错误

MongoDB $从带过滤器的数组中拉出

.net - 我可以依赖 LINQ ToArray() 总是返回一个新实例吗?