2016-05-14 14 views
1

Ich habe eine Datenstruktur wie unten. Wie kann ich einen Geo-Index für diese Struktur definieren?definieren Geo-Index in ArangoDB

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

habe ich versucht, diesen Befehl: 1-

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

2-

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

aber ich denke, keiner richtig funktioniert. denn nachdem ich die nächsten Gegenstände gesucht habe, habe ich []. Was ist das Problem?

+0

Haben die Antworten für Sie funktioniert? Wenn ja, können Sie das beste von ihnen als "akzeptiert" bezeichnen? Wenn nicht, was fehlt? Möchten Sie Ihre tatsächliche Lösung teilen? – dothebart

Antwort

3

Ihre zweite Indexerstellung ist die richtige.

Man muss wissen, dass Breite und Länge nicht tatsächlich km Einheiten sind. Die Eingabe von [-10, 1] in a distance calculator (die auch eine gute Lektüre über die Berechnungsdetails ist) sagt Ihnen 1117 km weg von [0,0]. Da die Einheit des Radius in ArangoDB m ist, werden die Zahlen groß.

an der aktuellen Stelle sucht nun nach, dass Ihr Artikel finden:

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

Aber von [0,0] Suche erfordert einen größeren Radius:

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 
    } 
    } 
] 
+0

läuft in das gleiche Problem, wenn Koordinaten wie in dieser Frage geschachtelt sind, funktioniert die Abfrage nicht. Wenn wir jedoch den Geo-Index für die Sammlung definieren, in dem die Daten nicht verschachtelt sind, funktioniert die Abfrage. – user3302146

1

der vorherigen Antwort auf von folgenden werden Sie mit die Arangosh-Schnittstelle oder Arangodb js?

Ich frage wie die Arangodb Js-Schnittstelle ist anders. In diesem Fall würde man sich etwas wie folgt aussehen:

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

Auch dann, wenn arangodb dann mit einer Reihe von wirklich sehr nützlich Geolokalisierung Funktionen kommen (in der Nähe, in usw.), die eine Hilfsfunktion haben, um automatisch die Entfernung zu berechnen.