1

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

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

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

4

1 回答 1

0

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

我看到您正在使用自定义类型来存储您的位置。确保您使用了 Transform 以确保类型在前往服务器的途中不会丢失。从简单模式自述文件

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

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

于 2015-04-24T05:24:39.370 回答