Я пытаюсь сохранить и запросить местоположения на основе координатных точек с 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
}
});
с конечной точкой express , я запрашиваю экземпляр 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 г.
Я не получил ни одной из них точек возврата в радиусе другой точки , несмотря на использование соседних координат для запроса. Я не понимаю, где это идет не так.
- Есть ли рабочий пример геопространственного запроса, который может возвращать точки в радиусе другой точки в мангусте 5.3.8?
редактировать: уточненный вопрос
EDIT:
Получил это на работу.
В настройках 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;
по некоторым причинам. Надеюсь, это кому-нибудь поможет.