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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zwei Gruppen, in diesem Fall. Die erste Gruppe erzeugt einen Strom von Dokumenten ein Dokument pro Begriff und Kategorie:
Eine zweite Gruppe wird dann verschmelzen Sie alle Dokumente mit dem gleichen Begriff in einem, mit dem $push Betreiber Zusammenführen der Kategorien in ein array:
{ $sort : { total : -1 } }
zwischen den beiden Gruppen zu gesamten die gruppierten Begriffe sind an der Spitze, aber ich kann nicht herausfinden, wie zu begrenzen, die Bedingungen zu sagen 5 pro Kategorie. Hinzufügen{ $limit: 6 }
zwischen den Gruppen nicht funktioniert. (Ich bin versucht zu tun, einem der top 5 Begriffe pro Kategorie-Abfrage). danke!Abfrage:
Antwort:
}