2013-05-14 15 views
22

Qual è la differenza tra l'operatore $match utilizzato all'interno della funzione di aggregazione e il normale find in Mongodb?

Perché la funzione find non consente la ridenominazione dei nomi dei campi come la funzione di aggregazione? ad es. In aggregato possiamo passare la seguente stringa:

{ "$project" : { "OrderNumber" : "$PurchaseOrder.OrderNumber" , "ShipDate" : "$PurchaseOrder.ShipDate"}} 

considerando che, trovare non lo consente.

Perché l'output aggregato non viene restituito come un DBCursor o un Elenco? e anche perché non possiamo ottenere un conteggio dei documenti che vengono restituiti?

Grazie.

+0

[MongoDB 2.6 operazioni di aggregazione restituirà un cursore] (http://docs.mongodb.org/master/release-notes/2.6/# aggregazione-operazioni-ora-return-cursori). Aggiornamento – vinipsmaker

risposta

28

Perché l'output aggregato non restituisce un DBCursor o un Elenco?

Il quadro di aggregazione è stato creato per risolvere problemi semplici che altrimenti richiederebbero una riduzione della mappa.

Questo framework viene comunemente utilizzato per calcolare i dati che richiedono il db completo come input e pochi documenti come output.

Qual è la differenza tra l'operatore $ match utilizzato all'interno della funzione di aggregazione e il normale find in Mongodb?

Una delle differenze, come hai dichiarato, è il tipo di ritorno. Trova l'output delle operazioni restituisce come DBCursor.

Altre differenze:

e anche perché non è possibile ottenere un conteggio dei documenti restituiti?

È possibile. Basta contare il numero di elementi nella matrice risultante o aggiungere il seguente comando alla fine del tubo:

{$group: {_id: null, count: {$sum: 1}}} 

Perché la funzione di ricerca non consente di rinominare i nomi dei campi, come la funzione di aggregazione?

MongoDB è giovane e le funzionalità sono ancora in arrivo. Forse in una versione futura saremo in grado di farlo. La ridenominazione dei campi è più critica nell'aggregazione rispetto a trova.

EDIT (2014/02/26):

MongoDB 2.6 aggregation operations will return a cursor.

EDIT (2014/04/09):

MongoDB 2.6 was released with the predicted aggregation changes.

+0

: In mongo 3.4 puoi contare in aggregato con '{$ count:" number_of_elements "}' – Daniel

0

Ho esaminato alcune cose sull'aggregazione e ho trovato la chiamata: Ho fatto questo con un ordinamento decrescente in una tabella di 160k documenti e limitato la mia uscita ad alcuni documenti.

  1. Il comando Aggregazione è più lento del comando di ricerca.
  2. Se si accede ai dati come ToList() il comando di aggregazione è più veloce del find.
  3. se si guarda ai tempi totali (punto 1 + 2) i comandi sembrano essere uguali

Forse l'aggregazione chiama automaticamente il ToList() e non dover chiamare di nuovo. Se non si chiama ToList(), la chiamata find() sarà molto più veloce.

7 [ms] vs 50 [ms] (5 documenti)

Problemi correlati