mongodb - 如何在不超过最大文档大小的情况下编写聚合?

标签 mongodb pymongo

我通过查询得到了超过最大文档大小问题异常,如下所示,

pipe = [
    {"$match": { "birthday":{"$gte":datetime.datetime(1987, 1, 1, 0, 0)} }}
    ]
res =db.patients.aggregate(pipe,allowDiskUse=True)

我通过添加 $project 运算符修复了它,

但是,如果即使我使用 $project 文档仍然超过 16MB 怎么办?

我能做什么?任何想法 ?谢谢

pipe = [
    {"$project": {"birthday":1, "id":1}
    },
    {"$match": { "birthday":{"$gte":datetime.datetime(1987, 1, 1, 0, 0)} }
     }
    ]
res =db.patients.aggregate(pipe,allowDiskUse=True)

异常

OperationFailure: command SON([('aggregate', 'patients'), ('pipeline', [{'$match': {'birthday': {'$gte': datetime.datetime(1987, 1, 1, 0, 0)}}}]), ('allowDiskUse', True)]) on namespace tw_insurance_security_development.$cmd failed: exception: aggregation result exceeds maximum document size (16MB)

最佳答案

默认情况下,聚合结果会在单个 BSON 文档中返回给您,这就是大小限制的来源。如果您需要返回更多,您可以:

  • 将结果输出到集合中。您可以通过完成管道来完成此操作

    {"$out": "某些集合名称"}

    然后您可以像平常一样查询该集合(完成后您需要自行删除它)

  • 通过在调用聚合时指定 useCursor=True 将结果作为游标返回。

这两个选项都需要 mongodb 2.6:如果您仍在运行 mongodb 2.4,那么这只是聚合的基本限制。

关于mongodb - 如何在不超过最大文档大小的情况下编写聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644587/

相关文章:

node.js - Mongoose 查询返回 'undefined' `

python - 如何用Python获取MongoDB集合的所有文档

python - PyMongo - 从另一台服务器克隆集合

mongodb - 查找具有重复键的批量插入中插入文档的数量

node.js - 错误: A required parameter (id) was not provided as a string in getStaticPaths for/location/[id]

python - 连接到 MongoDB 副本集 - pymongo

mongodb - Spring Data Mongo - 从 @DbRef 引用的对象中排除查询中的字段

python - 如何将 Date 对象传递给 mongo 数据库,它在传递 mongo 数据库后转换为 Int64 。如何使用 pymongo 做到这一点

python - Mongodb 上的高全局锁定百分比

Python 相当于 db.getCollectionInfos