Die folgende Abfrage ist nicht gültig. Kann mir bitte jemand auf den Fehler hinweisen?MongoDb Filter auf Wert des letzten Elements in einem Array
Ich versuche, auf alle Dokumente zu filtern, bei denen der letzte Eintrag im Array Progress
einen bestimmten Status hat - zum Beispiel "Fertig".
db.logdata.aggregate(
[
{ "$match": { "ProcessingInfo.Progress" : { "$exists": true } } },
{ "$redact":
{
"$cond": {
"if": { "$eq": [ { "$arrayElemAt": [ "$ProcessingInfo.Progress.State", -1 ], "Done" } ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}
}
]
)
Beispieldokument (, die angepasst werden sollte - weil der letzte Staat in Progress Array "InProgress" ist):
{
"_id" : ObjectId("578fa85bb29339a1fa6d6109"),
"ProcessingInfo" : {
"DateStarted" : ISODate("2016-08-06T16:55:58.294+0000"),
"Attempt" : NumberInt(1),
"LastState" : "Failed",
"Progress" : [
{
"State" : "Failed",
"StateDescription" : ""
},
{
"State" : "Success",
"StateDescription" : ""
},
{
"State" : "Done",
"StateDescription" : ""
},
{
"State" : "InProgress",
"StateDescription" : ""
}
]
}
}
Um Art "umgehen" dieses Problem habe ich ein zusätzliches Feld in der Document-Root "LastState" - ist das vielleicht der Weg zu gehen (complexity-weise)?
Das Beispieldokument ist das, was Sie als Ergebnis erwarten? Die Art, wie Sie $ arrayElemAt verwenden, ist falsch, es akzeptiert ein Array als ersten Parameter, während Sie eine Zeichenfolge übergeben –