MongoError:找不到任何特殊索引:2d(需要索引),2dsphere(需要索引)

时间:2013-10-06 20:11:38

标签: mongodb mongoose geospatial 2dsphere database

我试图通过使用MongoDB的find方法查询某个点周围的纬度和经度点来使用MongoDB的地理空间索引。我一直收到错误:

  

MongoError:找不到任何特殊指数:2d(需要指数),2dsphere(需要指数)

在谷歌搜索大约一个小时后,我不确定文档的位置。我也找不到任何好的解释。这是我使用Mongoose创建的Schema:

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 方法查找用户提供的其他 Event 文档。

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;
  }
});

我的错误是什么语法?我错过了什么巨大的东西?除了this link之外,任何文档的任何网址都会很棒。

1 个答案:

答案 0 :(得分:2)

您是否尝试使用此句子创建索引?

  

db.event.ensureIndex({“location”:“2d”})

你的例子有点令人困惑。如果'location'是你的坐标或'geo',我不会得到,因为你用前者创建模式,然后用后者查询。

在这两种情况下,最好执行

  

db.event.findOne()。漂亮()

因此,您可以检查收藏品的格式。

使用此命令,您还可以检查当前的索引。

  

db.event.getIndexes()

如果您正在处理'事件'集合,则所有这些都有效。