Supponendo che ho una collezione chiamata "post" (in realtà si tratta di una collezione più complessa, i messaggi è troppo semplice) con la seguente struttura:
> db.posts.find()
{ "id" : ObjectId("50ad8d451d41c8fc58000003"), "title" : "Lorem ipsum", "author" :
"John Doe", "content" : "This is the content", "tags" : [ "SOME", "RANDOM", "TAGS" ] }
mi aspetto questa collezione per coprire centinaia di migliaia, forse milioni, che ho bisogno di interrogare per post per tag e raggruppare i risultati per tag e visualizzare i risultati impaginati. Questo è dove il quadro di aggregazione viene in Ho intenzione di utilizzare il metodo di aggregazione() per interrogare la collezione:.
db.posts.aggregate(
{ "unwind" : "$tags" },
{ "group" : {
_id: { tag: "$tags" },
count: { $sum: 1 }
} }
);
Il problema è che per creare il Paginator avrei bisogno di conoscere la lunghezza della matrice di uscita. So che per fare che si può fare:
db.posts.aggregate(
{ "unwind" : "$tags" },
{ "group" : {
_id: { tag: "$tags" },
count: { $sum: 1 }
} }
{ "group" : {
_id: null,
total: { $sum: 1 }
} }
);
ma che sarebbe scartare l'uscita dalla tubazione precedente (il primo gruppo). Esiste un modo per combinare le due operazioni preservando l'output di ciascuna pipeline? So che l'output dell'intera operazione di aggregazione può essere convertito in un array in una lingua e il conteggio dei contenuti, ma potrebbe esserci la possibilità che l'output della pipeline possa superare il limite di 16 Mb. Inoltre, eseguire la stessa query solo per ottenere il conteggio sembra uno spreco.
Quindi è possibile ottenere il risultato del documento e contare allo stesso tempo? Qualsiasi aiuto è apprezzato.
Avete davvero bisogno di un conteggio totale completamente accurato, o se un'approssimazione fare? Poi di nuovo, sembra che tu stia contando tutti i post quindi non è solo un'operazione di conteggio() che puoi fare? – cirrus
In realtà sto facendo un conteggio su un gruppo di post così count() non lo farà. – MervS
soluzione perfetta per ottenere il totale preservando il risultato in pipe di aggregazione http://stackoverflow.com/a/39784851/3666966 –