2017-11-21 2 views
1

Sammlungmongodb Aggregation erhalten alle Felder Summe Gruppe von Datum

{ 
    "_id" : ObjectId("5a143a79ca78479b1dc90161"), 
    "createdAt" : ISODate("2017-11-21T14:38:49.375Z"), 
    "amount" : 227.93359186, 
    "pair" : "ant_eth" 
} 

Erwartete Ausgabe

{ 
    "12-12-2012": [ 
    { 
    "pair": "ant_eth", 
    "sum": "sum of amounts in 12-12-2012" 
    }, 
    { 
    "pair": "new_pair", 
    "sum": "sum of amounts in 12-12-2012" 
    }, 
    ], 
    "13-12-2012": [{ 
    "pair": "ant_eth", 
    "sum": "sum of amounts in 13-12-2012" 
    }] 
} 

Was ich bisher erreicht von meinem Wissen ist;

const criteria = [ 
    { $group: { 
    _id: '$pair', 
    totalAmount: { $sum: '$amount' } } } 
] 

Jede Hilfe zur Erreichung der erwarteten Leistung wird sehr geschätzt.

Antwort

2

OK wollen, so können Sie bis summieren beziehe nur den Datumsteil einer Datetime und eines Paares ein und "organisiere" dann alle Paare + Summe nach Datum. Sie können dies folgendermaßen tun, indem Sie wie folgt "neu gruppieren". Die erste $group erstellt die Summen, aber lässt Sie mit wiederholten Daten. Die zweite $group korrigiert die Ausgabe auf fast das, was Sie wünschen, außer dass die Daten als rvals zu _id bleiben, anstatt lvals (Feldnamen) selbst zu werden.

db.foo.aggregate([ 
    { 
    $group: { 
     _id: {d: {$dateToString: { format: "%Y-%m-%d", date: "$createdAt"}}, pair: "$pair"}, 
     n: {$sum: "$amount"} 
    } 
    }, 
    { 
    $group: { 
     _id: "$_id.d", 
     items: {$push: {pair: "$_id.pair", sum: "$n"}} 
    } 
    } 
]); 

Wenn Sie wirklich wollen, Feldnamen haben, dann fügen Sie diese beiden Phasen nach dem zweiten $group:

,{$project: {x: [["$_id","$items"]] }} 
,{$replaceRoot: { newRoot: {$arrayToObject: "$x"} }} 
0

Dies ist, was ich bekommen konnte an:

db.collection.aggregate([{ 
    $group: { 
     _id: { 
      year: { 
       "$year": "$createdAt" 
      }, 
      month: { 
       "$month": "$createdAt" 
      }, 
      day: { 
       "$dayOfMonth": "$createdAt" 
      }, 
      pair: "$pair" 
     }, 
     sum: { 
      $sum: "$amount" 
     } 
    } 
}]) 

Für Rest der Sache, werden Sie wahrscheinlich Sie generieren Parsen App Seite tun müssen, um Ausgang

Verwandte Themen