1

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

4

1 に答える 1

0

geoNear を使用した後、同じファセットを使用してドキュメントを投影し、他のファセットでは group by _id null を使用し、グループ内のカウントを使用してドキュメントの総数をカウントできます。

于 2019-12-13T05:45:35.263 に答える