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'.

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