2016-09-04 1 views
0

Wie kann ich auf alle Benutzer-IDs mit der Farbe Blau und Größe 50 im selben Element der Liste filtern? Nur Benutzer 1347 sollte ausgegeben werden.

{ 
     "userId": "12347", 
     "settings": [ 
      { name: "SettingA", color: "blue", size: 10 }, 
      { name: "SettingB", color: "blue", size: 20 }, 
      { name: "SettingC", color: "green", size: 50 } 
     ],  
    } 
    { 
     "userId": "1347", 
     "settings": [ 
      { name: "SettingA", color: "blue", size: 10 }, 
      { name: "SettingB", color: "blue", size: 50 }, 
      { name: "SettingC", color: "green", size: 20 } 
     ]  
    } 

Wenn dies mit $ elemMatch getan werden, wie kann ich schließe sie in der folgenden Abfrage, vorausgesetzt, die folgenden zwei Elemente in der gleichen Liste sein muss: { „rounds.round_values.decision“: „Fold "}, {" rounds.round_values.gameStage ":" PreFlop "}

Ich habe diese Abfrage versucht, aber es liefert keine Ergebnisse. Ich habe gelesen, dass elemMatch in Projektionen arbeitet. Aber wie kann ich $ filter sagen, dass nur Objekte zurückgegeben werden, bei denen die $ elemmMatch-Bedingungen erfüllt sind?

db.games.aggregate([ 
{ $match: { $and: [ 
    { Template: "PPStrategy4016" }, 
    { FinalOutcome: "Lost" }] 
}}, 
{ $elemMatch: { 
    { "rounds.round_values.decision" : "Fold"}, 
    { "rounds.round_values.gameStage" : "PreFlop"} 
    } }, 
{ 
    $group: { 
     _id: null, 
     total: { 
      $sum: "$FinalFundsChange" 
     } 
    } 
} ]) 

Antwort

0

den gegebenen Dokumente Nachfolgend wird die Abfrage etwas wie folgt:

db.games.aggregate( 
    {$unwind : "$settings"}, 
    {$match: {"settings.color" : "blue", "settings.size" : 50}} , 
    {$group: {_id: null, total: {$sum: "$settings.size"}}}) 

Wenn Sie Schwierigkeiten haben, es in Ihre eigene Domain bei der Transformation, Vorwände aus Ihrer Domain einige Beispieldokumente liefern.

+0

Wie weiß die Übereinstimmung, dass die Farbe Blau und die Größe 50 Teil des gleichen Elements sein müssen? Macht das nicht nur $ elemMatch? – Nickpick

+0

'$ unwind' entfaltet das Array, gefolgt von' $ match', das ist wie und und Abfrage (Farbe und Größe). '$ elemMatch' gilt nicht für die Aggregation –

Verwandte Themen