Perché l'output aggregato non viene restituito come DBCursor o List?
Il framework di aggregazione è stato creato per risolvere semplici problemi che altrimenti richiederebbero la riduzione della mappa.
Questo framework è comunemente usato per calcolare dati che richiedono l'intero db 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 affermato, è il tipo di restituzione. L'output delle operazioni di ricerca viene restituito come DBCursor .
Altre differenze:
- Il risultato dell'aggregazione deve essere inferiore a 16 MB. Se stai usando shard, i dati completi devono essere raccolti in un unico punto dopo il primo $group o $sort .
- $corrispondenza l'unico scopo è migliorare il potere di aggregazione, ma ha altri usi, come migliorare le prestazioni di aggregazione.
e anche perché non riusciamo a contare i documenti che vengono restituiti?
Puoi. Basta contare il numero di elementi nell'array risultante o aggiungere il seguente comando alla fine della pipe:
{$group: {_id: null, count: {$sum: 1}}}
Perché la funzione trova 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 in aggregazione che in trova .
MODIFICA (26/02/2014):
Le operazioni di aggregazione di MongoDB 2.6 restituiranno un cursore.
MODIFICA (09/04/2014):
MongoDB 2.6 è stato rilasciato con le modifiche all'aggregazione previste.