2017-01-09 11 views
0

Ich habe Dokumente in meinem MongoDB-Instanz, die Splitting und Aggregieren Zählung von Arrays

{ 
    ... 
    regions: ["Region-West", "Region-HC"], 
    care_levels: ["Memory Care"], 
    ... 
} 
{ 
    ... 
    regions: ["Region-West", "Region-SC"], 
    care_levels: ["Physical Rehab"], 
    ... 
} 
{ 
    ... 
    regions: ["Region-East", "Region-NC"], 
    care_levels: ["Physical Rehab"], 
    ... 
} 

Die Regionen wie folgt aussehen

und Pflegestufen sind sowohl ein Array von Strings. Ich möchte eine Zählung von Dokumenten durchführen, die durch einen bestimmten Satz von Regionen und Care_levels zugeordnet sind. Zum Beispiel -

Region-East, Physical Rehab => 20 
Region-East, Memory Care => 20 
Region-West, Memory Care => 30 

Ich verwende die folgende Abfrage

db.incidents.aggregate([ 
    {$match: 
    {"care_levels": { $size: 1, $in: ["Memory Care", "Physical Rehab"] }}, 
    }, 
    { "$group": { 
     "_id": { 
      "regions": "$regions", 
      "care_levels": "$care_levels", 
     }, 
     "incidentCount": { "$sum": 1 } 
    }}, 
]) 

und ich bekomme das Ergebnis als

{ "_id" : { "regions" : [ "Region-East", "Region-HC" ], "care_levels" : [ "Memory Care" ] }, "incidentCount" : 2409 } 
{ "_id" : { "regions" : [ "Region-East", "Region-HC" ], "care_levels" : [ "Physical Rehab" ] }, "incidentCount" : 2459 } 
{ "_id" : { "regions" : [ "Region-East", "Region-SC" ], "care_levels" : [ "Memory Care" ] }, "incidentCount" : 2504 } 
{ "_id" : { "regions" : [ "Region-West", "Region-HC" ], "care_levels" : [ "Memory Care" ] }, "incidentCount" : 2382 } 
{ "_id" : { "regions" : [ "Region-West", "Region-HC" ], "care_levels" : [ "Physical Rehab" ] }, "incidentCount" : 2475 } 
{ "_id" : { "regions" : [ "Region-East", "Region-SC" ], "care_levels" : [ "Physical Rehab" ] }, "incidentCount" : 2478 } 
{ "_id" : { "regions" : [ "Region-South", "Region-HC" ], "care_levels" : [ "Physical Rehab" ] }, "incidentCount" : 2405 } 
{ "_id" : { "regions" : [ "Region-West", "Region-SC" ], "care_levels" : [ "Memory Care" ] }, "incidentCount" : 2490 } 
{ "_id" : { "regions" : [ "Region-West", "Region-SC" ], "care_levels" : [ "Physical Rehab" ] }, "incidentCount" : 2433 } 
{ "_id" : { "regions" : [ "Region-South", "Region-HC" ], "care_levels" : [ "Memory Care" ] }, "incidentCount" : 2465 } 

ich die Bereiche herausfiltern möchte, dass ich nicht über egal . In diesem Fall möchte ich nicht die Aufteilung für Region-SC und Region-HC und die Zählung der Region-West/Ost/Süd sollte die Summe der Werte aus der Region-SC und Region-HC-Split sein.

Insbesondere in diesem Fall möchte ich die Werte

Region-East, Memory Care => (2409 + 2504) 
Region-West, Memory Care => (2382 + 2490) 

Wie kann ich dies durch weitere Aggregation erreichen?

Antwort

0

Ich realisierte eine einfache $ Entspannung zu Beginn tut, was ich brauche. Ich habe eine falsche Syntax dafür verwendet, daher die Probleme vorher.