Mongo $ geoNear不在所有记录中搜索

时间:2019-01-14 13:46:59

标签: mongodb

我想知道是否有人可以帮助我解决该查询问题。

我正在尝试使用$ 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
      }
  ]
}

1 个答案:

答案 0 :(得分:0)

我将查询更改为使用单独的find()和count()调用。该方面严重降低了查询速度,并且由于它确实不是一个复杂的查询,因此没有理由使用聚合。

我最初使用聚合是因为这样做是有意义的,它可以进行1次db调用而不是多次调用,并且使用$ facet可以在总页数中建立分页,但是它1次聚合调用花费了600ms,其中现在有find()和count()调用需要20毫秒。

16MB的限制也不再是问题。