use*_*745 10 geospatial mongoose mongodb nosql node.js
我发现定义地理空间索引'2d'有问题,如下所示.什么是错的任何线索?
var Address = new Schema({
loc : {lat: Number, lng: Number },
Address : String,
create_date : {type: Date, default: Date.now}
});
Address.index ({
loc : "2d"
});
Run Code Online (Sandbox Code Playgroud)
它会抛出错误,
events.js:45 throw arguments [1]; //未处理的'错误'事件^错误:指向不在 [object Object] 范围内.(/ 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)
})
Run Code Online (Sandbox Code Playgroud)
值得注意的是,您需要经度才能在阵列中的纬度之前.当您使用2D时,这不会影响您,但是当您使用3D时它将会影响您.数学上这是有道理的,因为经度是X坐标,而纬度是Y坐标(x,y),但是我们大多数人都熟悉不久之前的lat(而且最好的Mongo书之一有一个lat的例子不久,但它不包括2D).
最终你可能会想要使用3D,因为当你离开赤道时,2D计算并不准确.
更新:2015-12-08以上不再相关 - 请参阅更新的答案/ API文档
| 归档时间: |
|
| 查看次数: |
5465 次 |
| 最近记录: |