Ich habe ein System, das Einträge nach Aktion aufzeichnet. Es gibt mehr als 120 Millionen von ihnen und ich möchte sie mit Aggregat von id_entry gruppieren. Die Struktur ist wie die folgende:MongoDB Aggregat von 120M Dokumenten
entry
{
id_entry: ObjectId(...),
created_at: Date(...),
action: {object},
}
Wenn ich versuche, ein Aggregat von id_entry und Gruppierungs seine Aktionen zu tun, dauert es mehr als 3 Stunden zu beenden:
db.entry.aggregate([
{ '$match': {'created_at': { $gte:ISODate("2016-02-02"), $lt:ISODate("2016-02-03")}}},
{ '$group': {
'_id' :{'id_entry': '$id_entry'},
actions: {
$push: '$action'
}
}}])
Aber in diesem Bereich von Tagen gibt es nur um ~ 4M Dokumente. (id_entry und created_at hat Indizes)
Was mache ich falsch im Aggregat? Wie kann ich 3-4M Dokumente gruppieren, um sie in weniger als 3h durch id_entry zu verbinden? Dank
Haben Sie einen Index für 'created_at'? Wie lange dauert diese Abfrage: 'db.entry.find ({'created_at': {$ gte: ISODate (" 2016-02-02 "), $ lt: ISODate (" 2016-02-03 ")}})' ? – DmitryZyr
Hallo @ DmitryZyr, danke für die Antwort. Diese Abfrage dauerte 0.057s und ruft 2.703.103 Dokumente ab. Ich denke, das große Problem ist die Gruppierung von 2,7M-Dokumenten ... – Amarant