2013-03-21 14 views
8

Es sieht aus wie mongodb bietet zwei ähnliche Funktionen für Geospatial-Abfragen - $near und $geoNear. Laut der Mongo-Dokumentationmongodb geoNear vs in der Nähe von

Der Befehl geoNear bietet eine Alternative zum Operator $ near. In zusätzlich zu der Funktionalität von $ in der Nähe, liefert geoNear zusätzliche Diagnoseinformationen.

Es sieht aus wie geoNear einen Ober der near Funktionalität zur Verfügung stellt. Beispielsweise scheint near nur die nächsten 100 Dokumente zurückzugeben, während geoNear Sie ein Maximum angeben können. Gibt es einen Grund, near anstelle von geoNear zu verwenden? Ist einer effizienter als der andere?

Antwort

15

Der Wirkungsgrad sollte für beide identisch sein.

geoNear Die Haupteinschränkung ist, dass es als Befehl ein Ergebnis zurückgeben kann, das auf die maximale Dokumentgröße eingestellt ist, da alle übereinstimmenden Dokumente in einem einzigen Ergebnisdokument zurückgegeben werden. Es erfordert auch, dass jedem Ergebnisdokument ein Distanzfeld hinzugefügt wird, das je nach Ihrer Verwendung ein Problem darstellt oder nicht.

$near ist ein Abfrageoperator, daher können die Ergebnisse größer als ein einzelnes Dokument sein (sie werden immer noch in einer einzigen Antwort, aber nicht in einem einzelnen Dokument zurückgegeben). Sie können auch die maximale Anzahl von Dokumenten über das Limit der Abfrage() festlegen.

Ich empfehle Benutzern, sich an die $near zu halten, es sei denn, sie benötigen die diagnostics (z. B. Abstand oder Position übereinstimmend) aus dem Befehl geonear.

+0

Danke für die Klarstellung. Eine Sache, die unklar ist, ist, dass die Dokumente für fast sagen, dass es 100 Dokumente zurückgibt, aber in meinen Tests mit Mongo 2.4 scheint das nicht der Fall zu sein. Es scheint alle Dokumente zurückzugeben, wenn das Limit nicht verwendet wird. Weißt du, wie das Verhalten sein sollte? –

+0

Kurze Antwort: Nein, ich weiß nicht, was das erwartete Verhalten von 2.4 ist. Nach diesem Jira Ticket (https: //jira.mongodb.org/browse/SERVER-5236) sie haben die "progressiven" Ergebnisse der $ near-Abfragen immer noch nicht korrigiert, so dass sie irgendwann aufhört. Was Sie möglicherweise sehen, ist die Abfrage, die nur so viele Ergebnisse wie möglich im ersten Stapel zurückgibt, aber schließlich sollte die Größe dieses Stapels erschöpft sein. Rauben. –

+0

zumindest scheint es nicht auf 100 beschränkt zu sein, was ich dachte, war der Fall. Danke für die Hilfe. –

1

Die 100 Dokumente mit GeoNear begrenzen, ist das Standardverhalten, aber Sie können die num Felder nur eingestellt, wie auf der mongodb Dokumentation beschrieben (http://docs.mongodb.org/manual/reference/command/geoNear/)

Standard auf 100 gesetzt ist, aber Sie können mehr eingestellt. Leider überspringen Parameter wird für den Moment fehlt (siehe https://jira.mongodb.org/browse/SERVER-3925)

+0

Ich dachte, in der Nähe auch 100 Standardwerte, aber das scheint nicht der Fall zu sein –

1

Dies sind große Unterschiede: -

  1. $ geoNear auch Sie Abstand von dem Punkt gibt, aber in der Nähe von Befehl $ nicht.

  2. Der Befehl $ geoNear erfordert, dass die Auflistung höchstens einen 2d-Index und/oder nur einen 2dsphere-Index hat. Geospatial-Abfrageoperatoren wie $ near und $ geoWithin ermöglichen Sammlungen mehrere geospatiale Indizes. Dies liegt daran, dass es im Befehl $ geoNear keine Option gibt, das Feld anzugeben, nach dem Sie suchen möchten, wobei Sie wie im Befehl $ near den Feldnamen angeben können.

Verwandte Themen