1

我正在使用带有 mongoid 的 geoNear commang 来检索按距离排序的文档集合。我需要集合中每个文档的距离,这就是我不得不求助于 geoNear 命令的原因。给定以下命令:

category_ids = ["list", "of", "ids"]
cmd = Hash.new
cmd[:geoNear] = :poi
cmd[:near] = [params[:location][:x], params[:location][:y]]
cmd[:query] = {
  "$or" => [
    {primary_category_id: {"$in" => category_ids}},
    {category_ids: {"$in" => category_ids}}
  ]
}
cmd[:spherical] = true
cmd[:num] = num
res = Poi.collection.database.command cmd

我的问题是我需要集合中的结果总数。当然,我可以只运行另一个查询,只计算满足命令查询部分的项目数,但是这将非常低效并且也不是很可扩展,因为我在命令中所做的每一个更改都必须反映在计数中询问。仅仅添加一个 maxDistance 会让我陷入一大堆麻烦。

另一种选择是手动查找并计算距离,但我想再次避免这种情况。

所以我的问题是有一种巧妙的方法可以获取命令返回的文档数量(减去num),而无需运行单独的查询或手动计算距离并使用 find。

4

1 回答 1

0

在 geoNear 使用 facet 后,您可以使用 facet 来投影文档,而在其他情况下,您可以使用 group by _id null 并使用 group 中的计数来计算文档总数。

于 2019-12-13T05:45:35.263 回答