2017-03-20 2 views
1

Daten wie folgt aussieht:Summe Embedded Document Felder in Mongo Aggregatabfrage

{ 
    "_id":5345345345, 
    "city": "Detroit", 
    "people":[ 
     { 
      "name":"Larry", 
      "value":1200 
     }, 
     { 
      "name":"Steve", 
      "value":1100 
     }, 
     { 
      "name":"Larry", 
      "value":1000 
     }, 
     { 
      "name":"Joe", 
      "value":800 
     }, 
     { 
      "name":"Larry", 
      "value":500 
     }, 
     { 
      "name":"Joe", 
      "value":700 
     } 

    ] 
} 

ich diese haben in der Mitte eines Aggregats Abfrage. Was kann ich von hier aus tun, um das Wertfeld zu summieren und einen eindeutigen Eintrag für jede Person in "people" zu haben? dh

{ 
    "_id":5345345345, 
    "city": "Detroit", 
    "people":[ 
     { 
      "name":"Larry", 
      "value":2700 
     }, 
     { 
      "name":"Steve", 
      "value":1100 
     }, 
     { 
      "name":"Joe", 
      "value":1500 
     } 
    ] 
} 

Auch kann nicht Abfrage, die leere Dokument im Fall kehrt der „Volk“ Array leer ist, zum Beispiel, kann das nicht tun:

{$unwind:{ 
    path:people 
    } 
}, 
{$group : 
    { 
     _id:"$people.name", 
     total_value:{"$sum":"people.value"} 
    } 
} 

die fein funktionieren würde, wenn sie nicht zurückkehren ein leeres Dokument, wenn das Personen-Array leer ist.

Sie müssen $ addToSet und $ sum irgendwie verwenden? Wie macht man diesen Wert mit Name assoziiert?

+0

du meine Gedanken rollte. –

+0

@Jack: Warum können Sie kein leeres Dokument zurückgeben, wenn das Array _people_ leer ist? Die Abfrage, die Sie dort haben, sieht richtig aus (es ist genau das, was ich selbst empfehlen würde), also muss der Code Ihrer Anwendung möglicherweise mit dem Fall des leeren Dokuments umgehen können? –

+0

@VinceBowdren danke für die Eingabe wird wahrscheinlich am Ende – Jack

Antwort

0

Verwenden

{ 
     $unwind: { 
      path : "$people", 
      preserveNullAndEmptyArrays : true // this line! 
     } 
} 
Verwandte Themen