MongoDB verschachtelte Gruppe?

Ich versuche zur Implementierung einer geschachtelten Gruppe Abfrage in mongodb und ich bin immer stecken versuchen, um das äußere Gruppe durch. Angesichts der nachfolgend (vereinfacht) Daten Dokument:

{
  "timestamp" : ISODate(),
  "category" : "movies",
  "term" : "my movie"
}

Ich versuche zu erreichen, eine Liste aller Kategorien und innerhalb der Kategorien sollte es die Obere Reihe von Bedingungen. Ich möchte meine Ausgabe so etwas wie dieses:

[
 { 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 } ... ]
 },
]

Meine 'innere der Gruppe', ist, wie unten gezeigt, und Holen Sie sich die top 5 für alle Kategorien:

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 }

Wie würde ich mich über die Umsetzung der "äußeren " Gruppe"?

Zusätzlich manchmal die oben genannten Aggregat]ion gibt einen null-Wert (nicht alle Dokumente haben eine Laufzeit Wert). Wie gehe ich über das ignorieren der null-Werte?

vielen Dank im Voraus

InformationsquelleAutor clangers | 2014-09-04
Schreibe einen Kommentar