【问题标题】:Meteor - Update Collection with location object (in GeoJSON format)Meteor - 使用位置对象更新集合(GeoJSON 格式)
【发布时间】:2015-04-24 02:07:48
【问题描述】:

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

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" : {  } }

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

【问题讨论】:

    标签: mongodb meteor geospatial meteor-autoform 2dsphere


    【解决方案1】:

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

    我看到您正在使用自定义类型来存储您的位置。确保您使用了 Transform 以确保类型在前往服务器的途中不会丢失。来自Simple Schema readme

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

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

    【讨论】:

    • 我不太明白。 1)这应该注意允许插入:Providers.allow({ insert: function(userId, doc) { return true;}});。 2)我发现了这个问题link,我相信这是您对子模式的建议。但是我现在正在努力弄清楚如何更新这个对象?在@chaosbohne 的例子中,像Providers.update({_id: doc._id}, {$set: {loc: {type:"Point", coordinate:{lng:22.122,lat:-122.212} } } }); 这样的东西会起作用吗?
    • 1) 是的,你必须明确地允许更新和插入,所以 update: function(userId, doc, fieldNames, modifier)){ return true;} 也需要在你的允许对象中 2) 是的,更新代码应该正确地更新架构他描述了 3) 一定要像Providers.update(doc._id, {...}) 一样从客户端更新它。您的客户端代码通常不应在客户端使用对象作为选择器。
    • 我也确实有更新许可。但是,谢谢!它工作得很好。感谢您的帮助。
    猜你喜欢
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多