2016-06-09 11 views
1

ich so etwas wie dies unten haben,

Beispieldokument

{ 
    series: [ 
     { scores: { value: 10 } } 
    ] 
} 



$project: { 
    x: { $slice: ['$series', -1] } } 
}, 
{ $project: { x: { scores: 1 } } } 

So aus der Serie Array, möchte ich das letzte Objekt Mitglied, dann will ich nur die Noten von diesem eingereicht. Eigentlich scores.value aber nicht sicher, wie man das auch bekommt. Gibt es eine Möglichkeit, diese zusammen zu kombinieren?

Antwort

0

Sie verwenden den falschen Operator, um das letzte Objekt im Array zurückzugeben. Sie müssen $project Ihre Dokumente und verwenden Sie die $arrayElemAt, um das letzte Objekt, das Sie auf eine Variable setzen können mit dem Variablenoperator $let zurückgeben dann verwenden Sie die dot notation, um das "Wert" -Feld zu adressieren.

db.collection.aggregate(
    [ 
     { "$project": { 
      "value": { 
       "$let": { 
        "vars": { "score": { "$arrayElemAt": [ "$series", -1 ] } }, 
        "in": "$$score.value" 
       } 
      } 
     }} 
    ] 
)