1

私は以下のようなデータ構造を持っています。その構造の地理インデックスを定義するにはどうすればよいですか?

{
  "currentGeoLocation": {
    "latitude": -10,
    "longitude": 1
  }
}

これらのコマンドを試しました:1-

db.test.ensureIndex({ type: "geo", fields: [ "currentGeoLocation[latitude]","currentGeoLocation[longitude]" ] }); 

2-

 db.test.ensureIndex({ type: "geo", fields: [ "currentGeoLocation.latitude","currentGeoLocation.longitude" ] }); 

しかし、どれも正しく機能しないと思います。最寄りのアイテムを検索した後、[] を取得したためです。どうしたの?

4

2 に答える 2

3

2 番目のインデックス作成は正しいものです。

緯度と経度は実際には km 単位ではないことを知っておく必要があります。距離計算機(これも計算の詳細についてよく読んでいます) に入ると、[-10, 1]から離れていることがわかります。半径の単位はArangoDBなので数値が大きくなります。1117 km[0,0]m

実際の場所で検索すると、確実にアイテムが見つかります。

db._query('FOR item IN WITHIN(test, -10, 1, 1) RETURN item').toArray()

ただし、から検索するに[0,0]は、より大きな半径が必要です。

db._query('FOR item IN WITHIN(test, 0, 0, 1200000) RETURN item').toArray()
[ 
  { 
    "_key" : "840", 
    "_id" : "test/840", 
    "_rev" : "840", 
    "currentGeoLocation" : { 
      "latitude" : -10, 
      "longitude" : 1 
    } 
  } 
]
于 2016-05-17T09:47:24.680 に答える
1

前の回答に続いて、arangosh インターフェイスまたは arangodb js を使用していますか?

arangodb jsインターフェースが違うのでお願いします。この場合、次のようになります。

db.collection('testnodes').createGeoIndex(['currentGeoLocation.latitude', 'currentGeoLocation.longitude'])

また、arangodb には、距離を自動的に計算するヘルパー関数を備えた非常に便利な Geolocation 関数 (near、within など) が多数付属しています。

于 2016-06-14T20:52:54.967 に答える