我开始研究流星应用程序,以便开始学习框架。应用程序应该在数据库中存储许多地理定位对象,并显示每次最接近用户的对象。简单的东西。
处理数据的代码如下
服务器端代码
Meteor.startup(function(){
Datum._ensureIndex({ location : "2dsphere" });
});
Meteor.methods({
saveData : function(data){
var insert = {
'text' : data.text,
'location': {
longitude: data.location.coords.longitude,
latitude: data.location.coords.latitude
},
'submittedOn': new Date(),
'submittedBy' : Meteor.userId()
};
var dataId = Datum.insert(insert);
return dataId;
}
});
// This supposed to fetch the nearby data every time I call Datum.find({}) on the client
Meteor.publish('nearbyObjects', function(location){
return Datum.find({
location: {
$near: [location.coords.longitude, location.coords.latitude],
$maxDistance: 5
}
});
});
公用
Datum = new Meteor.Collection("datum");
当我保存我的数据时似乎工作正常,但当我尝试获取它时,我看到了这个错误:
Exception in queued task: MongoError:
can't parse query (2dsphere): { $near: [ 23.72931, 37.983715 ], $maxDistance: 5 }
奇怪的是,当我部署到我的演示流星服务器时,查询工作正常并返回结果就好了。如果我尝试使用每个数据库上的meteor mongo
工具手动运行查询,则会发生同样的情况。每个人都发现了这个问题吗?
我正在运行meteor 0.8.0
,而mongodb中的version()
命令会在所有服务器中返回2.4.9
。
答案 0 :(得分:1)
从它看起来,你没有正确构建你的位置对象。我记不清了,但看起来你正在使用旧的符号作为你的坐标,这已被弃用。 2dsphere不再支持您正在使用的样式。
请改用:
location: {
type : "Point",
coordinates : [ 23.72931, 37.983715 ]
}
然后您可以将其用作查询:
return Datum.find({{
$near : {
$geometry : {
type : "Point",
coordinates : [ 23.72931, 37.983715 ]
}
},
$maxDistance : 5
});
mongodb文档中的更多详细信息:http://docs.mongodb.org/manual/reference/operator/query/near/