我正在使用带有 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。