Sto cercando di implementare una query di gruppo nidificata in mongodb e mi sto bloccando cercando di aggiungere il gruppo esterno per. Dato il seguito (semplificato) documento di dati:Gruppo nidificato MongoDB?
{
"timestamp" : ISODate(),
"category" : "movies",
"term" : "my movie"
}
Sto cercando di ottenere un elenco di tutte le categorie e all'interno delle categorie ci dovrebbe essere il numero superiore di termini. Vorrei che la mia uscita di qualcosa di simile:
[
{ category: "movies",
terms: [ { term: "movie 1", total: 5000 }, { term: "movie 2", total: 200 } ... ]
},
{ category: "sports",
terms: [ { term: "football 1", total: 4000 }, { term: "tennis 2", total: 250 } ... ]
},
]
mio 'gruppo interno' è come mostrato di seguito, e otterrà la top 5 per tutti categorie:
db.collection.aggregate([
{ $match : { "timestamp": { $gt: ISODate("2014-08-27") } } },
{ $group : { _id : "$term", total : { $sum : 1 } } },
{ $sort : { total : -1 } },
{ $limit: 5 }
]);
// Outputs:
{ "_id" : "movie 1", "total" : 943 }
{ "_id" : "movie 2", "total" : 752 }
Come potrei fare per implementare il "gruppo esterno"?
Inoltre, a volte il suddetto aggregato] ione restituisce un valore nullo (non tutti i documenti hanno un valore di termine). Come faccio a ignorare i valori nulli?
grazie in anticipo
grazie! Questo ha risolto il mio problema, ho aggiunto '{$ sort: {total: -1}}' tra i due gruppi per intero i termini più raggruppati sono in cima, ma non riesco a capire come limitare i termini per dire 5 per categoria. Aggiungere '{$ limit: 6}' tra i gruppi non funziona. (Sto cercando di fare una top 5 termini per query di categoria). Grazie! – clangers