пн goose геолокация + дистанционный запрос - PullRequest
0 голосов
/ 05 января 2020

Я не уверен, как воссоздать следующий запрос .find в запросе mon goose:

db.places.find({
  loc: { $geoWithin: { $centerSphere: [[-74, 40.74], 100 / 3963.2] } }
});

Я настроил схему

const AdScheme = new Schema({
  location: {
    coordinates: [{ 0: Number, 1: Number }]
  },
  type: String,
  name: String
});

export default mongoose.model("campaign", AdScheme);

, но теперь я нужно сделать запрос на поиск, и это не просто .findOne().

Может кто-нибудь дать мне пример превращения приведенного выше в запрос mongoosedb?

1 Ответ

0 голосов
/ 05 января 2020

В пн goose документы говорится, что пн goose имеет вспомогательный метод для $ geoWithin .

Во-первых, схема должна быть обновлена ​​следующим образом:

const AdScheme = new Schema({
  location: {
    type: {
      type: String,
      default: 'Point',
      enum: ['Point']
    },
    coordinates: [Number]
  },
  type: String,
  name: String
});

А затем запросите вот так:

AdModel.find().where('loc')
  .within({ center: [50,50], radius: 10, unique: true, spherical: true })

Другой вариант будет использовать агрегацию mongoDB $ geoNear .

Затем вы можете использовать это в пн goose как это:

const geoNearOptions: {
  ... //todo
}

AdModel.aggregate([
  { $geoNear: geoNearOptions}
])
...