我正试图从我的Mongo集合中聚合数据,通过生成一个大型的JSON文件来为FreeCodeCamp生成一些统计信息,以供以后使用。
我遇到标题上的错误了。这方面的信息似乎不多,其他的帖子也不多,所以没有答案。我使用的是最新版本的MongoDB和驱动程序。
我怀疑有更好的方法来运行这个聚合,但是它在我的集合的一个子集上运行良好。我的全部收藏是~7GB。
我正在通过node aggScript.js > ~/Desktop/output.json
相关代码如下:
MongoClient.connect(secrets.db, function(err, database) {
if (err) {
throw err;
}
database.collection('user').aggregate([
{
$match: {
'completedChallenges': {
$exists: true
}
}
},
{
$match: {
'completedChallenges': {
$ne: ''
}
}
},
{
$match: {
'completedChallenges': {
$ne: null
}
}
},
{
$group: {
'_id': 1, 'completedChallenges': {
$addToSet: '$completedChallenges'
}
}
}
], {
allowDiskUse: true
}, function(err, results) {
if (err) { throw err; }
var aggData = results.map(function(camper) {
return _.flatten(camper.completedChallenges.map(function(challenges) {
return challenges.map(function(challenge) {
return {
name: challenge.name,
completedDate: challenge.completedDate,
solution: challenge.solution
};
});
}), true);
});
console.log(JSON.stringify(aggData));
process.exit(0);
});
});
最佳答案
Aggregate返回一个包含所有结果数据的单个文档,这将限制可以返回多少数据到最大BSON文档大小。
假设您确实需要所有这些数据,有两个选项:
使用aggregateCursor
而不是aggregate
。这将返回一个光标而不是一个文档,然后您可以对其进行迭代
添加一个$out
阶段作为管道的最后一个阶段。这会告诉MongoDB将聚合数据写入指定的集合。聚合命令本身不返回任何数据,然后像查询任何其他集合一样查询该集合。
关于mongodb - Mongo聚合和MongoError:异常:BufBuilder尝试 grow() 到134217728字节,超过64MB限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34467454/