Sto cercando di ottenere un elenco del numero di record con matrici di dimensioni variabili. Voglio ottenere la distribuzione delle dimensioni di matrice per tutti i record in modo da poter costruire un istogramma come questo:Il modo più veloce per ottenere l'istogramma delle dimensioni degli array utilizzando il framework di aggregazione MongoDB
| *
| *
documents | * *
| * * *
|_*__*__*___*__*___
2 5 6 23 47
Array Size
Così i documenti prime simile a questa:
{hubs : [{stuff:0, id:6}, {stuff:1"}, .... ]}
{hubs : [{stuff:0, id:6}]}`
Finora utilizzando il quadro aggregazione e alcuni dei aiuto here mi è venuta in mente
db.sitedata.aggregate([{ $unwind:'$hubs'},
{ $group : {_id:'$_id', count:{$sum:1}}},
{ $group : {_id:'$count', count:{$sum:1}}},
{ $sort : {_id: 1}}])
Questo sembra darmi i risultati che voglio, ma non è molto veloce. Mi chiedo se c'è qualcosa che posso fare in questo modo che potrebbe non aver bisogno di due chiamate di gruppo. La sintassi è sbagliato qui, ma quello che sto cercando di fare è mettere il valore di conteggio nel primo campo _id:
db.sitedata.aggregate([{ $unwind:'$hubs'},
{ $group : {_id:{$count:$hubs}, count:1}},
{ $sort : { _id: 1 }}])
non c'è un modo per farlo in un passaggio perché non è possibile iniziare a contare/raggruppare i risultati fino a quando non si termina il conteggio del primo raggruppamento. Quale versione di MongoDB stai usando? –
a proposito, quanto tempo ci vuole? –
Ok, ho il sospetto che potrebbe essere il caso (nidificazione non consentita, solo concatenamento). Ci vogliono circa 4 secondi, il che non è male ma speravo al secondo. Posso modificare i miei dati invece di modificare la query ora. – Scott