MongoError: не может найти никаких специальных индексов: 2d (нужен индекс), 2dsphere (нужен индекс)
Я пытаюсь использовать геопространственную индексацию MongoDB, запрашивая точки широты и долготы вокруг определенной точки, используя метод find MongoDB. Я продолжаю получать ошибку:
MongoError: не может найти никаких специальных индексов: 2d (нужен индекс), 2dsphere (нужен индекс)
Я не уверен, где документация для этого после Google в течение часа. Также я не могу найти хорошие объяснения. Вот схема, которую я создал с помощью Mongoose:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var EventSchema = new Schema ({
name: String,
description: String,
location: {type: [String], index: '2dsphere'},
time: Date,
photo: Buffer,
activity: String
});
mongoose.model('Event', EventSchema);
Затем я использую метод find, чтобы найти другие документы о событиях вокруг точки, которую предоставляет пользователь.
var maxDistance = 0.09;
var lonLat = {$geometry: {type: 'Point', coordinates: [34.09,124.34] }};
Event.find({
'geo': {
$near: lonLat,
$maxDistance: maxDistance
}
}).exec(function(err, events) {
if(err) {
throw err;
} else {
return events;
}
});
Какой синтаксис у меня здесь не так? Я что-то упускаю огромное? Любые ссылки на любую документацию будут отличными, кроме этой ссылки.
1 ответ
Вы пытались создать индекс с этим предложением?
db.event.ensureIndex ({"location": "2d"})
Это немного запутывает ваш пример. Я не получаю, если "location" - это ваши координаты или "geo", потому что вы создаете схему с первым и запрашиваете второе.
В обоих случаях хорошей идеей является выполнение
db.event.findOne(). довольно ()
Таким образом, вы можете проверить формат вашей коллекции.
Также с помощью этой команды вы можете проверить свои текущие индексы.
db.event.getIndexes ()
Все это работает, если вы работаете над коллекцией 'event'.