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. geolocationgのdeliveryArea[lat、lng]のすべての要素のensure_indexを作成するにはどうすればよいですか?
  2. ポリゴンdeliveryArea。$内(に属する)のポイントN [lat、lng]を持つドキュメントを検索するクエリを作成する方法

PHPができるなら-お願いします)

ありがとう!

4

1 に答える 1

3

まず、データ構造を変更する必要があります。MongoDB は「経度、緯度」を必要とし、フィールドにどの名前を付けるかは気にしません。通常、フィールド名なしで使用します。また、「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 はそれを直接行うことができません。その 2 次元インデックスはポイントしか保存できないからです。http://jira.mongodb.orgで機能リクエストを提出してください。

于 2012-06-04T08:02:55.910 に答える