以下查詢無效。任何人都可以請指出我的錯誤?對數組中最後一個元素值的MongoDb過濾器
我試圖過濾Progress
數組中最後一個項目具有給定狀態的所有文檔 - 例如「完成」。 (應匹配- 因爲在進步陣列最後的狀態是「INPROGRESS」)
db.logdata.aggregate(
[
{ "$match": { "ProcessingInfo.Progress" : { "$exists": true } } },
{ "$redact":
{
"$cond": {
"if": { "$eq": [ { "$arrayElemAt": [ "$ProcessingInfo.Progress.State", -1 ], "Done" } ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}
}
]
)
示例文件:
{
"_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" : ""
}
]
}
}
爲一種「迴避」這個問題我有一個額外的字段在文檔根目錄「LastState」中 - 這可能是要走的路(複雜性)?
樣本文件是你期望的結果是什麼?你使用$ arrayElemAt的方法是錯誤的,它接受一個數組作爲第一個參數,而你傳遞一個字符串 –