nodejs - Mongoose 5.3.8 - Запросы GeoJSON не работают

Я пытаюсь сохранить и запросить местоположения на основе координатных точек с помощью Mongoose 5.3.8, чтобы вернуть точки в радиусе другой точки. Я прочитал документы и реализовал пример pointSchema + citySchema в разделе: Использование данных GeoJSON, показанных ниже

const pointSchema = new mongoose.Schema({
  type: {
    type: String,
    enum: ['Point'],
    required: true
  },
  coordinates: {
    type: [Number],
    required: true
  }
});

const citySchema = new mongoose.Schema({
  name: String,
  location: {
    type: pointSchema,
    required: true
  }
});

с помощью экспресс- конечной точки я запрашиваю экземпляр mLab со следующим кодом и документом, хранящимся как:

DOCUMENT ---------------------------

{
    "_id": "5bdbeb78949541086880dd35",
    "name": "Location1",
    "location": {
        "coordinates": [
            48.5,
            -123.8
        ],
        "_id": "5bdbeb78949541086880dd36",
        "type": "Point"
    }
}

QUERY --------------------------------

Location.findOne({
   location: {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: coordinates // [long, latt]
       },
       $maxDistance: 10000,
       $minDistance: 1
     }
    }
  }).then(res => console.log(res))
    .catch(err => console.log(err))

Приведенный выше запрос обнаружил ошибку:

 planner returned error: unable to find index for $geoNear query

Я попытался добавить индекс в LocationSchema, вызвав.index()

LocationSchema.index({ "location": "2dsphere" });

Я также попытался добавить индекс в схему:

LocationSchema.index({ category: 1, location: "2dsphere" });

в схеме не был создан индекс, и ошибка не исчезла.


Я попытался несколько других комбинаций схемы / запроса, включая:

  1. Геопространственный поиск Mongoose: расстояние не работает - 7 февраля 2016 г.
  2. Геопространственные Запросы Mongoose с $ около - 10 апреля 2018
  3. не удалось найти индекс для запроса $geoNear # 6549 - 31 мая 2018 г.
  4. Учебник Net Ninja по GeoJSON - 27 марта 2017 г.

Я не получил ни одного из них, чтобы вернуть точки в радиусе другой точки, несмотря на использование соседних координат для запроса. Я не понимаю, где это идет не так.

  • Есть ли рабочий пример геопространственного запроса, который может возвращать точки в радиусе другой точки в mongoose 5.3.8?

редактировать: уточненный вопрос

РЕДАКТИРОВАТЬ:

Получил это на работу. В опциях mongoose, подключающихся к экземпляру mLab, мои варианты были следующими:

    const mongoOptions = {
  useCreateIndex: true,
  useNewUrlParser: true,
  autoIndex: false,
  reconnectTries: Number.MAX_VALUE,
  reconnectInterval: 500,
  poolSize: 10,
  bufferMaxEntries: 0
};

autoIndex: false Параметр сделал так, чтобы новые индексы не могли быть созданы даже при указании LocationSchema.index({ "location": "2dsphere" });, Чтобы это исправить я должен был добавить LocationSchema.options.autoIndex = true; по какой-то причине. Надеюсь, это может кому-то помочь.

0 ответов

Другие вопросы по тегам