P.S: - Этап конвейера $ group добавлен только для того, чтобы получить счетчик и, следовательно, не написал об этом в объяснении.
ользую $ geoNear в качестве первого шага в структуре агрегации. Мне нужно отфильтровать результаты на основе поля «тег», и он работает нормально, но я вижу, что есть два способа, которые дают разные результаты.
Образец документа MongoDB
{ "position": [ 40.80143, -73.96095 ], "tag": "pizza" }
Я добавил 2dsphere индекс к ключу "позиция"
db.restaurants.createIndex( { 'position' : "2dsphere" } )
Запрос 1
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}} } ] );
Запрос 2
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}} } ] );
Опция группировки - это просто получить количество документов, возвращаемых обоими запросами.
TotalDocs, возвращаемые обоими запросами, кажутся разными.
Может ли кто-нибудь объяснить мне разницу между обоими запросами?