距離順に並べられたドキュメント コレクションを取得するために、mongoid で geoNear コマンドを使用しています。コレクション内の各ドキュメントの距離が必要なため、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
したがって、私の質問は、別のクエリを実行したり、距離を手動で計算して検索を行ったりすることなく、コマンドによって返されるドキュメントの数 ( を差し引いたもの) を取得する賢い方法があることです。