Неопределенность в отношении $ geoNear в совокупном запросе - PullRequest
0 голосов
/ 13 февраля 2019

Я настраиваю проект на основе местоположения, где я работаю с GeoJSON.Я использовал $ geoNear, и я довольно знаком с ним.Теперь я попал в ситуацию, когда мне нужно проверить из списка документов, попадают ли они в maxDistance или нет.И проблема здесь в том, что maxDistance не предопределена.Он варьируется от документа к документу и хранится в документе.

Это что-то вроде каждого магазина, отображаемого на карте, которая настраивается пользователем, чтобы получать информацию, когда пользователь находится в диапазоне отРасстояние до магазина.И пользователь определяет расстояние.Например: Пользователь добавляет местоположение и описывает расстояние для него.Теперь сценарий использования будет уведомлять пользователя на карте, если он достигнет определенного расстояния для этого местоположения.

Location.aggregate([
{
    $geoNear: {
    spherical: true,
    near: { type: 'Point', coordinates: [ user.location.coordinates[0], user.location.coordinates[1] ] },
    maxDistance: {Needs to be taken from each Location document and each document should be filtered against own distance},
    distanceField: 'dist.calculated'
   }
 }

Худший подход - я загружаю все документы с расстоянием, а затем перебираю, чтобы проверить, попадают ли они вих конкретное расстояние, но я хочу следовать хорошему и профессиональному подходу.Есть какие-нибудь подсказки?

Вот схема местоположения:

Location = new Schema({
  location: {
        type: {
          type: String,
          enum: ['Point'], 
        },
        coordinates: {
          type: [Number]
        }
    },
  distance: {
    type: Number
  }
})

И я просто передаю текущие координаты пользователя в запрос.

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете использовать $expr

Location.aggregate([
  { "$geoNear": {
    "spherical": true,
    "near": { "type": "Point", "coordinates": [ user.location.coordinates[0], user.location.coordinates[1] ] },
    "distanceField": "dist.calculated"
  }},
  { "$match": { "$expr": { "$lte": ["$distanceField", "$distance"] }}}
])
...