我有以下mongo文档结构。
{
"geo": {
"0": {
"deliveryArea": {
"0": {
"lat": 50.449234773334,
"lng": 30.52300029031
},
"1": {
"lat": 50.449234773334,
"lng": 30.52542980606
},
"2": {
"lat": 50.45154573136,
"lng": 30.52542980606
},
"3": {
"lat": 50.45154573136,
"lng": 30.52300029031
}
},
"title": "Kiev, ....",
"coords": {
"lat": "50.4501",
"lngt": "30.523400000000038"
},
"wholeCityDelivery": "false"
}
问题:
- 如何为地理位置的交付区域 [lat,lng] 中的每个元素ensure_index?
- 如何构建查询以查找点为 N[lat,lng] 在(属于)多边形交付区域的文档。
如果你能做PHP - 请)
谢谢!
首先,您需要更改数据结构。MongoDB想要"经度,lattitude",它不在乎你给字段起了哪些名字——一般来说,我会在没有字段名称的情况下使用它们。您还需要存储不带"0"键的文档
所以喜欢:
{
"geo": {
"deliveryArea": [
[ 30.52300029031, 50.449234773334 ],
]
}
}
然后你需要在"geo.deliveryArea"上设置一个2D索引:
$collection->ensureIndex( array( "geo.deliveryArea" => "2d" ) );
有关如何构建查询的信息可以在 http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-BoundsQueries 但是,在您的情况下,您希望找到一个点的交付区域,而不是检查存储的点是否适合给定区域,而MongoDB不能直接执行此操作,因为它的2d索引只能存储点。请在 http://jira.mongodb.org 提交功能请求