我想知道是否有人可以帮助我解决该查询问题。
我正在尝试使用$ geoNear运算符查询我的所有项目,但maxDistance很大,它似乎无法在所有记录中进行搜索。
日志显示此错误“太多的geoNear查询结果”,这显然意味着查询达到16MB的限制,但输出只有20条记录,并声称总数为1401,我希望总数为17507。
平均记录为12345字节。在1401处记录停止,因为它达到16MB的限制。
如何运行此查询,以便它返回从整个项目库中获取的前20个结果?
这是我正在运行的查询
db.getCollection('items').aggregate([
{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": [
10,
30
]
},
"minDistance": 0,
"maxDistance": 100000,
"spherical": true,
"distanceField": "location",
"limit": 100000
}
},
{
"$sort": {
"createdAt": -1
}
},
{
"$facet": {
"results": [
{
"$skip": 0
},
{
"$limit": 20
}
],
"total": [
{
"$count": "total"
}
]
}
}
])
这是查询的输出(错误已添加到日志中):
{
"results" : [
// 20 items
],
"total" : [
{
"total" : 1401
}
]
}
答案 0 :(得分:0)
我将查询更改为使用单独的find()和count()调用。该方面严重降低了查询速度,并且由于它确实不是一个复杂的查询,因此没有理由使用聚合。
我最初使用聚合是因为这样做是有意义的,它可以进行1次db调用而不是多次调用,并且使用$ facet可以在总页数中建立分页,但是它1次聚合调用花费了600ms,其中现在有find()和count()调用需要20毫秒。
16MB的限制也不再是问题。