Meteor - 使用位置对象更新集合(GeoJSON格式)

时间:2015-04-24 02:07:49

标签: mongodb meteor geospatial meteor-autoform 2dsphere

这是我的架构(简单架构):

officelocation: {
type: String,
label: 'Location of Office',
autoform: {
  type: 'map',
  afFieldInput: {
    type: 'map',
    geolocation: true,
    searchBox: true,
    autolocate: true
  }
}
},
location: {
  optional: true,
  type: 'Point'
}

我的服务器端js代码在下面(注意这是在collection.after钩子中)所以我想根据用户输入的地址更新它,我已经解析为lat long:

Providers.update({_id: doc._id}, {$set: {location: {type:"Point", coordinates:[lng,lat]} } });

当我在集合中看到该文件(db.providers.find();)时,我看到以下内容..请注意,嵌入对象的位置为空:

{ "_id" : "X8ZfKYJAP9cduwvmd",  "phone" : 999999999, "officelocation" : "40.7192714,14.872363899999982", "createdAt" : ISODate("2015-04-24T02:00:40.447Z"), "updatedAt" : ISODate("2015-04-24T02:00:40.799Z"), "owner" : "GB4TxTHodkykeeXp6", "officeaddress" : "Via Califri, 5, 84099 San Cipriano Picentino SA, Italy", "location" : {  } }

我基本上试图确保集合以地理空间可搜索的方式存储,但这种方法似乎不起作用。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

可能有许多因素导致您的更新失败,从允许拒绝规则到简单架构清理数据。

我发现您使用的是自定义类型来存储您的位置。确保您已使用转换以确保在前往服务器的途中不会丢失类型。来自Simple Schema readme

  

默认情况下,自定义对象类型被视为黑盒子对象。但是,使用collection2时,必须确保客户端和服务器之间的自定义类型不会丢失。这可以通过将通用Object转换为自定义对象的转换函数来完成。如果没有此转换,客户端插入和更新可能会在客户端上成功,但在服务器上失败。或者,如果您不关心丢失自定义类型,则可以为自定义对象类型显式设置blackbox:true,而不是使用转换。

或者,您可以使用子架构来定义允许的位置,而不是使用自定义类型,但它不会保留Point类型的方法。