Hallo allerseits Ich habe ein großes Problem bei der Abfrage meiner Daten. Ich habe Dokumente wie folgt aus:Aggregation Abfrage in Mongo und Feder-Daten-Mongo
{
"_id" : NumberLong(999789748357864),
"text" : "#asd #weila #asd2 welcome in my house",
"date" : ISODate("2016-12-13T21:44:37.000Z"),
"dateString" : "2016-12-13",
"hashtags" : [
"asd",
"weila",
"asd2"
]
}
und ich möchte zwei Abfragen erstellen:
1) für jeden Tag die Anzahl der hashtag zählen und wie dies zum Beispiel etwas raus:
{_id:"2016-12-13",
hashtags:[
{hashtag:"asd",count:20},
{hashtag:"weila",count:18},
{hashtag:"asd2",count:10},
....
]
}
{_id:"2016-12-14",
hashtags:[
{hashtag:"asd",count:18},
{hashtag:"asd2",count:14},
{hashtag:"weila",count:10},
....
]
}
2) ein anderes ist das gleiche, aber ich möchte einen Zeitraum von 2016-12-13 bis 2016-12-17 festlegen.
Für den ersten schreibe ich diese Abfrage und ich bekomme, was ich suche, aber in Spring Data Mongo kann ich nicht schreiben.
db.comment.aggregate([
{$unwind:"$hashtags"},
{"$group":{
"_id":{
"date" : "$dateString",
"hashtag": "$hashtags"
},
"count":{"$sum":1}
}
},
{"$group":{
"_id": "$_id.date",
"hashtags": {
"$push": {
"hashtag": "$_id.hashtag",
"count": "$count"
}},
"count": { "$sum": "$count" }
}},
{"$sort": { count: -1}},
{"$unwind": "$hashtags"},
{"$sort": { "count": -1, "hashtags.count": -1}},
{"$group": {
"_id": "$_id",
"hashtags": { "$push": "$hashtags" },
"count": { "$first": "$count" }
}},
{$project:{name:1,hashtags: { $slice: ["$hashtags", 2 ]}}}
]);
Vielen Dank für Ihre Antwort @chridam, ich realisiere die gleiche Sache und arbeite gut, aber mit dieser Lösung muss ich eine Abfrage für jeden Tag machen. Im Fall 2 ist es perfekt. Wissen Sie, wie Sie das Hashtag-Array in Spring Data aufteilen, um nur die ersten zehn Elemente zu erhalten? In mongo sortiere ich die Zählung und mache danach eine Projektion. {$ Project: {name: 1, hashtags: {$ slice: ["$ hashtags", 2]}}} aber $ slice ist für die von mir verwendete Version nicht implementiert . Ich muss die innere Struktur sortieren und sie begrenzen, aber im Frühjahr Daten Mongo Ich weiß nicht, wie zu tun, Irgendwelche Vorschläge? – dantavo
Fügen Sie dieses 'Projekt (" Name "). Und (" Hashtags "). Projekt (" Slice ", 2))' nach der Gruppe in der Aggregation Abfrage – Veeram
Vielen Dank @SagarReddy, löse ich das Problem auf eine seltsame Art und Weise Das Ergebnis ist richtig. Ich habe ein Limit (2) vor dem zweiten Gruppenschritt in der Aggregationsfunktion gesetzt, aber ich werde diese Anweisung mit der ändern, die Sie mir vorschlagen;) – dantavo