1

Ich möchte nach user_id von order Sammlung gruppieren, wo es viele Einträge gibt, aber ich möchte die Top 5 Benutzer holen, die mehr Aufträge gemacht haben und den Gesamtpreis des bestimmten Benutzers summieren .

Zum Beispiel, wenn ich 10 Bestellungen gemacht habe, möchte ich meine ID und Summe meiner Bestellungen abrufen. Ich habe unten Code verwendet, aber seine nicht funktioniert:

Order.find({$group : { user_id : "$user_id"}},function(error,fetchAllTopUsers){ 
    console.log('##################'); 
     console.log(fetchAllTopUsers); 
    }) 

ich dieses Beispiel überprüft haben, aber sie sind nicht mit mit $group finden. Ich bin neu in Node.js und MongoDB.

Query and sum all with mongoose

Beispieldokumente

{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 100 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 59 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 26 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 533 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 544 },  
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 250 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 157 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 149 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 104 } 

Ich bin ein Ausgang wie unten erwartet: nur mit der Aggregation Rahmen

{ 
    user_id : '57c7f4312b3c9771219bd21c', 
    finalTotal : 1262 
}, 
{ 
    user_id : '57efb93fdc78c816a3a15c4a' 
    finalTotal : 660 
} 
+0

ok, lassen Sie mich Tabellendaten hinzuzufügen. –

Antwort

1

Der $group Betreiber ist daher müssen Sie Führen Sie eine Aggregationspipeline aus, die die Dokumente nachgruppiertFeld und dann sortiert die Dokumente nach dem aggregierten finalTotal Feld mit $sort und dann erhalten Sie die Top 5 Dokumente mit $limit.

diese Pipeline Folgen Sie die benötigten Ergebnisse zu erhalten:

Order.aggregate([ 
    { 
     "$group": { 
      "_id": "$user_id", 
      "finalTotal": { "$sum": "$totalprice" } 
     } 
    }, 
    { "$sort": { "finalTotal": -1 } }, 
    { "$limit": 5 } 
]).exec(function(error, fetchAllTopUsers){ 
    console.log('##################'); 
    console.log(fetchAllTopUsers); 
}); 
+0

Vielen Dank für Ihre Antwort. Ich muss den Gesamtpreis nach user_id summieren. wie pritesh machen 100 Bestellungen und Gesamtpreis ist 15000, Chridam machen 3 Bestellungen und Gesamtpreis ist 5000 wie das –

+0

Über die Antwort funktioniert, aber unten funktioniert nicht. Sehe meinen Kommentar noch einmal. Ich habe mit Beispiel bearbeitet –

+0

Ja Herr, ich stimmte zu, lassen Sie mich meine Frage bearbeiten. –