这是我的架构(简单架构):
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" : { } }
我基本上试图确保集合以地理空间可搜索的方式存储,但这种方法似乎不起作用。有什么帮助吗?
答案 0 :(得分:0)
可能有许多因素导致您的更新失败,从允许拒绝规则到简单架构清理数据。
我发现您使用的是自定义类型来存储您的位置。确保您已使用转换以确保在前往服务器的途中不会丢失类型。来自Simple Schema readme:
默认情况下,自定义对象类型被视为黑盒子对象。但是,使用collection2时,必须确保客户端和服务器之间的自定义类型不会丢失。这可以通过将通用Object转换为自定义对象的转换函数来完成。如果没有此转换,客户端插入和更新可能会在客户端上成功,但在服务器上失败。或者,如果您不关心丢失自定义类型,则可以为自定义对象类型显式设置blackbox:true,而不是使用转换。
或者,您可以使用子架构来定义允许的位置,而不是使用自定义类型,但它不会保留Point
类型的方法。