我正在尝试从 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/ 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)