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" });
в схеме не был создан индекс, и ошибка не исчезла.
Я попытался несколько других комбинаций схемы / запроса, включая:
- Геопространственный поиск Mongoose: расстояние не работает - 7 февраля 2016 г.
- Геопространственные Запросы Mongoose с $ около - 10 апреля 2018
- не удалось найти индекс для запроса $geoNear # 6549 - 31 мая 2018 г.
- Учебник 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;
по какой-то причине. Надеюсь, это может кому-то помочь.