0

我有以下 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"
}

问题:

  1. 如何确保deliveryArea [lat,lng]中每个元素的insure_index用于地理位置g?
  2. 如何构建查询以查找具有点 N[lat,lng] 在(属于)多边形交付区域中的文档。$

如果你能做 PHP - 请)

谢谢!

4

1 回答 1

3

首先,你需要改变你的数据结构。MongoDB 想要“经度,纬度”,它不关心你给字段取什么名字——一般来说,我会在没有字段名的情况下使用它们。您还需要在没有“0”键的情况下存储文档

就像:

{
    "geo": {
        "deliveryArea": [
             [ 30.52300029031, 50.449234773334 ],
        ]
    }
}

然后你需要在“geo.deliveryArea”上设置一个二维索引:

$collection->ensureIndex( array( "geo.deliveryArea" => "2d" ) );

有关如何构建查询的信息可以在http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-BoundsQueries但是,在您的情况下,您希望找到一个点的交付区域,而不是检查是否存储点适合给定区域,而 MongoDB 不能直接这样做,因为它的 2d 索引只能存储点。请在http://jira.mongodb.org提交功能请求

于 2012-06-04T08:02:55.910 回答