$ geoNear不会返回所有结果

时间:2019-05-31 07:38:59

标签: mongodb aggregation-framework pymongo

我正在使用$geoNear聚合阶段,并希望检索半径3 km之内的所有文档:

pipeline = [
    {
        '$geoNear': {
            'near': {
                'type': 'Point',
                'coordinates': [50, 50],
            },
            'distanceField': 'distance',
            'maxDistance': 3000,
            'query': {
                '$and': [
                    {'field1': {'$in': ['value1', 'value2']}},
                    {'field2': {'$exists': True}}
                    ...
                ]
            },
            'limit': 999999999,
            'spherical': True,
            'key': 'location_field'
        }
    },
    ...
]

但是,我在日志中收到此警告

2019-05-30T17:08:47.075+0200 W COMMAND  [conn13] Too many geoNear results for query {...}, truncating output.

结果不完整。

我发现this SO question指向this MongoDB ticket,并指出问题出在结果数组的16 MB大小限制内。但是,该票证与2.6版有关,并且问题(和答案)已经存在两年多了。我最近没有发现任何东西。

建议是限制从$geoNear阶段返回的结果数,这对我来说不是一个选择。或将find()$near(或$nearSphere)运算符一起使用。这也不是最佳选择,因为我必须自己计算距离,并且还需要在第一阶段的结果之上进行聚合($near不能在聚合$match阶段使用)。我正在考虑的另一种解决方案是用多边形近似圆并在$geoWithin聚合阶段使用$match。这样可以部分解决我的问题,因为我仍然需要自己计算距离场。

因此,我想问问是否有人知道有关此问题的更多详细信息-这是MongoDB的“无法修复”功能还是有解决此问题的路线图。或者,如果还有其他解决方法。

0 个答案:

没有答案