我正在使用$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的“无法修复”功能还是有解决此问题的路线图。或者,如果还有其他解决方法。