集計フレームワークの最初のステップとして$ geoNearを使用しています。私は "タグ"フィールドに基づいて結果をフィルタリングする必要があり、それはうまく動作しますが、私は2つの方法が異なる結果を与えることがわかります。
サンプルMongoDBのドキュメント
{ "position": [ 40.80143, -73.96095 ], "tag": "pizza" }
私は、 "位置" キー
db.restaurants.createIndex({ 'position' : "2dsphere" })
クエリ1
がオンに基づいて結果をフィルタリングする$ geoNear集約操作の内側にクエリを使用します
db.restaurants.aggregate( [ { "$geoNear":{ "near": { type: "Point", coordinates: [ 55.8284,-4.207] }, "limit":100, "maxDistance":10*1000, "distanceField": "dist.calculated", "includeLocs": "dist.location", "distanceMultiplier":1/1000, "spherical": true } },{ "$match":{"tag":"pizza"} }, { "$group":{"_id":null,"totalDocs":{"$sum":1}} } ] );
クエリに基づいて結果をフィルタリングするために$マッチaggregrationのパイプライン動作を使用しています「タグ」キー
db.restaurants.aggregate( [ { "$geoNear":{ "query" : {"tag":"pizza"} "near": { type: "Point", coordinates: [ 55.8284,-4.207] }, "limit":100, "maxDistance":10*1000, "distanceField": "dist.calculated", "includeLocs": "dist.location", "distanceMultiplier":1/1000, "spherical": true } }, { "$group":{"_id":null,"totalDocs":{"$sum":1}} } ] );
グルーピングオプションはg両方のクエリによって返されたドキュメントの数。
両方のクエリによって返されるtotalDocsは異なるようです。
両方のクエリの違いを教えてもらえますか?