【发布时间】:2011-11-12 22:40:06
【问题描述】:
我在定义地理空间索引“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]; // 未处理的“错误”事件 ^ 错误:点不在范围内 [object 目的]。 (/cygdrive/c/个人/软件/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)
})
【问题讨论】:
-
看起来你也在使用 Mongoose。您是否有正在执行的实际对象/查询?问题可能出在 Node 驱动程序中,也可能出在 Mongoose 中,也可能出在代码中,所以我们只需要多做一点。
-
是的,你是对的。我正在使用猫鼬。我已经编辑了上面的问题并添加了代码。保存正常进行。当我发现它抱怨索引时,当我添加索引时,它说“点不在范围内”
-
好吧,我将属性名称从 loc 更改为“location”,并将“2d”更改为“2d”,现在看来,它正在工作。这很奇怪。
标签: node.js mongodb mongoose geospatial nosql