mongodb中的地理空间索引与node.js

我在find如下所示的定义地理空间索引“2d”的问题。 任何线索什么是错的?

var Address = new Schema({ loc : {lat: Number, lng: Number }, Address : String, create_date : {type: Date, default: Date.now} }); Address.index ({ loc : "2d" }); 

它抛出错误,

events.js:45个参数[1]; //未处理“错误”事件^错误:在[对象对象] 处不在范围内 。 (/ cygdrive / c / Personal / software / nodejs / NODE / no de_modules / mongoose / node_modules / mongodb / lib / mongodb / db.js:503:20)

编辑:添加代码

 var Address = new Schema({ type : {type: String, enum: ['Apartment', 'House', 'Serviced Apartment'], default: 'Apartment'}, loc : {lat: Number, lng: Number }, Address : String, create_date : {type: Date, default: Date.now} }); /* Address.index ({ loc : "2d" }); */ mongoose.connect('mongodb://127.0.0.1:27017/test123', function(err) { if (err) { console.log("error in mongo connection"); throw err; } console.log("connected to mongo"); }); var RentModel = mongoose.model('Rent', Address); socket = io.listen(app); socket.sockets.on('connection', function(client){ console.log('inside on connection'); client.on('register', function(msg){ console.log("msg.geometry.type", msg.geometry.type); var rent = new RentModel(); rent.type = 'Apartment'; rent.loc.lat = 23; rent.loc.lng = 56; rent.Address = "LLLLLLLLIIIIIIIOOOOOOONNNNNNNN" console.log("before save"); rent.save(function(err){ console.log("rent.save start"); if(err) { throw err; console.log("error in save"); } console.log("saved"); }); }); RentModel.find({loc : { $near : [20, 50], $maxDistance: 30 }} , function(err, docs){ if (err) { console.log("error in finding near", err); throw err; } console.log('docs.length : ' , docs.length); console.log('docs : ',docs) }) 

还值得一提的是,你会想要经度在你arrays的纬度之前。 这在使用2D时不会影响到你,但是在你使用3D的时候会影响到你。 在math上这是有道理的,因为经度是X坐标,纬度是Y坐标(x,y),但是我们大多数人都熟悉拉特来不久之后(和最好的蒙古书之一有一个例子拉特之前不久,但不包括2D)。

最终,你可能会想要使用3D,因为当你离开赤道时,2D计算并不准确。


更新:2015-12-08以上不再相关 – 请参阅更新的答案/ API文档

你可能需要一些参考资料,如何做到这一点:)以及后来的人。 以防万一,有人感兴趣

http://www.jmanzano.es/blog/?p=592