Pymongo 聚合管道仅返回 100 个文档

时间:2021-03-02 23:23:51

标签: python-3.x mongodb pymongo-3.x

我有一个简单的管道并且在 MongoDB Compass 中运行良好,但是当我尝试使用 Pymongo 执行相同的管道时,我得到的文档数量较少。当我检查结果游标仅包含或限制 100 个文档时,但在 Compass 中我看到返回了更多数据。我正在使用以下连接,但不确定我缺少什么。

预期文档少于 200 个文档。

Python version: 3.7
Pymongo version: pymongo==3.11.3


db.collections.aggregate([
    {
        '$match': {
            'subject': {
                '$in': [
                    '1','2','3'
                ]
            }
        }
    }, {
        '$lookup': {
            'from': 'schools', 
            'localField': 'locId', 
            'foreignField': 'locId', 
            'as': 'schools'
        }
    }, {
        '$unwind': {
            'path': '$schools', 
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$unwind': {
            'path': '$schools.schools', 
            'preserveNullAndEmptyArrays': False
        }
    }, {
        '$match': {
            'schools.appointmentDate': {
                '$gte': datetime(2021, 3, 15, 0, 0, 0, tzinfo=timezone.utc), 
                '$lt': datetime(2021, 3, 16, 0, 0, 0, tzinfo=timezone.utc)
            }, 
            'schools.schools.appointmentStatus': {
                '$in': [
                    'Scheduled'
                ]
            }
        }
    }, {
        '$group': {
            '_id': '$subject', 
            'totalAppointments': {
                '$sum': 1
            }
        }
    }
])

我还在 mongo 查询中在排序后使用了 {"$limit" : 10000},但没有帮助我。

有人可以帮我检查一下吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定为什么“聚合”没有为我返回完整的结果集,所以我尝试了 这种使用“aggregate_raw_batches”的替代方法并解决了我的问题。

import bson
cursor = db.test.aggregate_raw_batches(pipeline) 
for batch in cursor:
    for i in bson.decode_all(batch):
         #do with documents..