Альтернатива $geoNear MongoDB

я работаю над API. одна из моих конечных точек возвращает мне Spots вокруг точки, определенной координатами LONGITUDE и LATITUDE, упорядоченными по страницам. Я также отправляю PAGE_SIZE для номера или места для возврата и MIN_DISTANCE для начала страницы, которая является последним элементом последней страницы.

Я использую для этого ключ $geoNear, это удобно, потому что он также возвращает мне расстояние до центра, которое я использую для пейджинга.

К сожалению, сейчас я размещаю базу данных на Azure COSMOS DB, и кажется, что $geoNear не поддерживается.

https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-feature-support-36#aggregation-stages

что было бы лучшей альтернативой для получения наиболее похожего результата? есть набор или ключ, который звучит хорошо, но не может определить лучший вариант: ($geoWithin, $geoIntersects, $near, $nearSphere, $geometry)

https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-feature-support-36#geospatial-operators

Spots.aggregate
    ([
      {
        $geoNear: {
          near: {
            type: "Point",
            coordinates: [ LONGITUDE, LATITUDE ]
          },
          distanceField: "location.distance",
          spherical: true,
          minDistance: MIN_DISTANCE,
          maxDistance: DISTANCE * 1000,
          query: {
            $and: [
              ...
            ]
          }
        }
      },
      { $match: {} },
      { $limit : PAGE_SIZE},
      ...

Спасибо :)


person TANYERES Alexandre    schedule 12.01.2021    source источник
comment
Будет $near или $nearSphere.   -  person Wernfried Domscheit    schedule 12.01.2021


Ответы (1)


Наконец-то я использовал $nearSphere и получил почти такой же результат, за исключением расстояния, которое я посчитаю вручную.

Spots.aggregate(
    [
      {
        $match: {
          $and: [
            {
              location: {
                $nearSphere: {
                  $geometry: {
                      type : "Point",
                      coordinates : [ LONGITUDE, LATITUDE ]
                  },
                  $minDistance: MIN_DISTANCE,
                  $maxDistance: MIN_DISTANCE * 1000
                }
              }
            },
            ...
          ]
        }
      },
      { $limit : PAGE_SIZE},
      ...
person TANYERES Alexandre    schedule 12.01.2021