Mongodb 如何聚集过大的收藏,数量超过100亿的文档

Mongodb 如何聚集过大的收藏,数量超过100亿的文档,mongodb,pymongo,Mongodb,Pymongo,我犯了以下错误。当我试图通过user\u id或在user\u id 失败:异常:聚合结果超过最大文档大小 失败:异常:明显太大,16mb上限 我想知道如何在非常大的收藏量下完成我的任务 数据格式 聚合查询 此查询尝试对用户进行分组,并将医疗记录的所有症状附加到每个用户 db.medical_records.aggregate([ { "$sort": { "datetime": 1 } }, { "$group": {

我犯了以下错误。当我试图通过user\u id或在user\u id

失败:异常:聚合结果超过最大文档大小
失败:异常:明显太大,16mb上限

我想知道如何在非常大的收藏量下完成我的任务

数据格式 聚合查询 此查询尝试对用户进行分组,并将医疗记录的所有症状附加到每个用户

db.medical_records.aggregate([
    {
        "$sort": { "datetime": 1 }
    },
    {
        "$group": {
            "_id": "$user_id",
            "symptom1":{
                "$push": {"symptom": "$SYMPTOM_1" ,"date": "$datetime"}
            },
            "symptom2":{
                "$push": {"symptom": "$SYMPTOM_2" ,"date": "$datetime"}
            },
            "symptom3":{
                "$push": {"symptom": "$SYMPTOM_3" ,"date": "$datetime"}
            },                        
           "first_date": { "$first": "$datetime" },
           "user_id": { "$first": "$user_id" },
           "count": { "$sum": 1 }
        }
    },
    {
        "$project": {
            "user_id": "$user_id",
            "date": "$datetime",
            "symptom1": "$symptom1",
            "symptom2": "$symptom2",
            "symptom3": "$symptom3",
            "count": "$count",
            "_id": 1
        }
    }
],allowDiskUse=true)
预期产量
看起来您正在尝试使用allowDiskUse选项,这可能会解决您的问题,但不幸的是,您似乎有一个语法错误

将选项传递给操作时,需要将其作为对象传递,对象周围有
{
}

这里要做的是将
true
赋值给一个新的全局变量
allowDiskUse
,并将赋值操作的结果传递给aggregate,这个值就是
true

尝试将
],allowDiskUse=true)
替换为
],{allowDiskUse:true})


这允许您绕过每个聚合阶段的16MB限制。但是请记住,这仍然是一个非常缓慢的操作。

您能展示一小部分文档的聚合结果吗?我认为您可以尝试将聚合框架的结果输出到另一个集合中。我没有测试itt,因此发表评论。让我知道它是否会产生结果。我认为您应该使用$limit来减少返回的文档。与在MongoDB中一样,您不能编写返回大于16mb结果的查询。@proc:您能解释一下为什么要为每一个已编号的症状创建一个数组吗?有一系列的症状不是更好吗?此外,
$project
阶段是完全冗余的。@MarkusWMahlberg因为这是原始的数据库设计,我不能修改它。虽然它看起来是多余的,但我使用的是
pymongo
而不是javascript,因此语法在我的代码中似乎没有问题
db.medical_records.aggregate([
    {
        "$sort": { "datetime": 1 }
    },
    {
        "$group": {
            "_id": "$user_id",
            "symptom1":{
                "$push": {"symptom": "$SYMPTOM_1" ,"date": "$datetime"}
            },
            "symptom2":{
                "$push": {"symptom": "$SYMPTOM_2" ,"date": "$datetime"}
            },
            "symptom3":{
                "$push": {"symptom": "$SYMPTOM_3" ,"date": "$datetime"}
            },                        
           "first_date": { "$first": "$datetime" },
           "user_id": { "$first": "$user_id" },
           "count": { "$sum": 1 }
        }
    },
    {
        "$project": {
            "user_id": "$user_id",
            "date": "$datetime",
            "symptom1": "$symptom1",
            "symptom2": "$symptom2",
            "symptom3": "$symptom3",
            "count": "$count",
            "_id": 1
        }
    }
],allowDiskUse=true)
{u'user_id': u'de96dsdase303c6c6439891c57901183c0e4c',
   u'symptom1': [{u'symptom': u'1479 ', u'date': u'20040910'}],
   u'symptom2': [{u'symptom': u'     ', u'date': u'20040910'}],
   u'symptom3': [{u'symptom': u'     ', u'date': u'20040910'}],
   u'count': 1,
   u'first_date': u'20040910'}