当我尝试使用聚合连接从我的集合中获取文档时,我收到错误"聚合结果超过最大文档大小(16MB)"我也在使用" {allowDiskUse:true}"在我的代码中,但它再次显示错误。请让我知道如何解决它?
答案 0 :(得分:1)
如上所述,您正在炸毁“响应”大小限制,因为您没有返回“光标”而.aggregate()
正在尝试将结果返回到单个BSON文档中。
相反,请使用生成stream
界面的"cursor"
选项,然后您可以对以下事件采取行动:
db.collection("bags", function (err, bags) {
var result = [];
var cursor = bags.aggregate(
[
{ "$sort": { "todayDate": -1 }},
//{ "$match": {}},
{ "$lookup": {
"from": "donor",
"localField": "regNo",
"foreignField": "regNo",
"as": "donordata"
}},
{ "$unwind": { "path": "$donordata", "preserveNullAndEmptyArrays": true}}
],
{
"allowDiskUse": true,
"cursor": { "batchSize": 20 }
}
);
cursor.on("data",function(data) {
result.push(data);
});
cursor.on("end",function() {
res.json(result);
})
});
理想情况下,您也应该在编写输出行时使用流,例如使用JSON的流编写器。但是出于示例目的,我们只是将数据附加到数组中,用于迭代的每个游标结果。