应用程序远程工作但在本地给我数据库错误

时间:2014-04-08 21:27:22

标签: mongodb meteor

我开始研究流星应用程序,以便开始学习框架。应用程序应该在数据库中存储许多地理定位对象,并显示每次最接近用户的对象。简单的东西。

处理数据的代码如下

服务器端代码

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

1 个答案:

答案 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/