2013-03-21 6 views
8

Sembra che mongodb offra due funzioni simili per le query geospaziali - $near e $geoNear. Secondo i documenti mongomongodb geoNear vs near

Il comando geoNear fornisce un'alternativa all'operatore $ near. In oltre alla funzionalità di $ near, geoNear restituisce ulteriori informazioni di diagnostica .

Sembra che geoNear fornisce un superset della funzionalità near. Ad esempio, near sembra restituire solo i 100 documenti più vicini, mentre geoNear consente di specificare un massimo. C'è un motivo per utilizzare near anziché geoNear? Uno è più efficiente dell'altro?

risposta

15

L'efficienza dovrebbe essere identica per entrambi.

geoNear La limitazione principale è che come comando può restituire un risultato impostato alla dimensione massima del documento poiché tutti i documenti corrispondenti vengono restituiti in un unico documento di risultato. Inoltre, è necessario aggiungere un campo di distanza a ciascun documento dei risultati che potrebbe essere o meno un problema a seconda dell'utilizzo.

$near è un operatore di query in modo che i risultati possano essere maggiori di un singolo documento (vengono comunque restituiti in un'unica risposta ma non in un singolo documento). È inoltre possibile impostare il numero massimo di documenti tramite il limite della query().

Tendo a raccomandare che gli utenti rimangano con $near a meno che non abbiano bisogno dello diagnostics (ad esempio, distanza o posizione corrispondente) dal comando geonear.

+0

Grazie per il chiarimento. Una cosa che non è chiara è che i documenti per quasi dire che restituisce 100 documenti, ma nei miei test con mongo 2.4, non sembra essere il caso. Sembra che restituisca tutti i documenti a meno che non venga usato il limite. Sai quale dovrebbe essere il comportamento? –

+0

Risposta breve: No Non so quale sia il comportamento previsto 2.4. Secondo questo biglietto Jira (https: //jira.mongodb.org/browse/SERVER-5236) non hanno ancora corretto i risultati "progressivi" dalle query $ vicine, quindi si fermeranno a un certo punto. Quello che potresti vedere è la query che restituisce il maggior numero possibile di risultati nel primo batch, ma alla fine la dimensione di quel batch dovrebbe essere esaurita. Rapinare. –

+0

almeno sembra non essere limitato a 100, che ho pensato fosse il caso. grazie per l'aiuto. –

1

limitare i 100 documenti con GeoNear è il comportamento di default, ma si può semplicemente impostare il num campi come descritto nella documentazione MongoDB (http://docs.mongodb.org/manual/reference/command/geoNear/)

di default è impostato su 100, ma è possibile impostare più. Purtroppo saltare parametro manca per il momento (vedi https://jira.mongodb.org/browse/SERVER-3925)

+0

Ho pensato vicino anche alle impostazioni predefinite 100 ma non sembra essere il caso –

1

Queste sono le principali differenze: -

  1. $ geoNear dà anche la distanza dal punto ma $ nei pressi di comando non lo fa.

  2. comando $ geoNear richiede che la raccolta avere al massimo un solo indice 2d e/o di una sola 2dsphere indice mentre gli operatori di query geospaziali come $ vicino e $ collezioni permesso geoWithin di avere più indici geospaziali. Questo perché nel comando $ geoNear non esiste alcuna opzione per specificare il campo sul quale si desidera effettuare la ricerca, dove come in $ vicino al comando è possibile specificare il nome del campo.