P.S: - Этап конвейера $ group добавлен только для того, чтобы получить счетчик и, следовательно, не написал об этом в объяснении.

ользую $ geoNear в качестве первого шага в структуре агрегации. Мне нужно отфильтровать результаты на основе поля «тег», и он работает нормально, но я вижу, что есть два способа, которые дают разные результаты.

Образец документа MongoDB

    {
      "position": [
        40.80143,
        -73.96095
      ],
      "tag": "pizza"
    }

Я добавил 2dsphere индекс к ключу "позиция"

    db.restaurants.createIndex( { 'position' : "2dsphere" } )

Запрос 1

использует операцию конвейера агрегации $ match для фильтрации результатов по ключу «tag»
    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

Использует запрос внутри операции агрегации $ geoNear для фильтрации результатов по ключу «tag»
    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, возвращаемые обоими запросами, кажутся разными.

Может ли кто-нибудь объяснить мне разницу между обоими запросами?

Ответы на вопрос(2)

Ваш ответ на вопрос