我在mongo db中有几个大型集合。一些大小约500 MB。
(Collections get bigger over time reaching the 500MB in size and bigger)
Collection1:
109091 documents
total size: 154.3MB
avg size of document: 1.4KB
Collection2:
102197 documents
TOTAL SIZE
15.1MB
AVG. SIZE
155B
Collection3:
319 documents
TOTAL SIZE
115.8KB
AVG. SIZE
372B
Collection1与acc字段中的collection2相关 Collection1与tc字段上的Collection3有关
只在每个集合中索引其记录_id,我并不真正用它来查询集合。
我在本地计算机上运行节点js: 窗户10 RAM:16 GB
mongoDB数据库位于我无法访问的linux机器中。
我正在尝试迭代其中一个集合并处理每个记录,同时获取另一个集合上的相应记录。
processStream : function(){
var stream = Collection.find().cursor();
stream.on('data', function (doc) {
if (doc.tn !== null && (doc.tc !== null || doc.cTc !== null) && doc.acc !== null){
//function that findOne per the account field
module.exports.getAcc(doc.acc, function(res){
if ( res!== null ){
//function that findOne per the tc field
module.exports.getProd(doc.tc, function(res2){
if (res2 !== null){
//write to another mongodb collection
}
});
}
});
}
}).on('error', function (err) {
console.log(err);
}).on('close', function () {
console.log('processing finished');
callback();
});
}
然后在路线文件中,我有以下呼叫
app.get('/api/process/', function(req, res){
console.time('proc');
functions.processStream(function(){
console.timeEnd('proc');
console.log('...operations ended');
});
res.json('...processind started');
});
这需要很长时间。收集越大,花费的时间越长。有没有其他方法可以循环遍历mongoDB中的集合并更快地处理每个记录?我相信node / mongodb / mongoose可以用于更大的集合(GB ??也许)..
考虑到我的收藏品的大小,只需要花费19分钟来收集收藏中的记录。