我试图通过使用MongoDB的find方法查询某个点周围的纬度和经度点来使用MongoDB的地理空间索引.我一直收到错误:
MongoError: can’t find any special indices: 2d (needs index), 2dsphere (needs index)
谷歌搜索大约一个小时后,我不确定文档的位置.我也找不到任何好的解释.这是我使用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方法查找用户提供的点周围的其他事件文档.
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之外,任何文档的任何网址都会很棒.
最佳答案 你试着用这句话创建索引吗?
db.event.ensureIndex({ “location” : “2d” } )
你的例子有点令人困惑.如果’location’是您的坐标或’geo’,我不会得到,因为您使用前者创建架构并使用后者进行查询.
在这两种情况下,一个好主意是执行
db.event.findOne().pretty()
因此,您可以检查集合的格式.
使用此命令还可以检查当前索引.
db.event.getIndexes()
如果您正在处理“事件”集合,则所有这些都有效.