다음 쿼리는 유효하지 않습니다. 누구든지 오류를 가르쳐 주시겠습니까?배열의 마지막 요소 값에 대한 MongoDb 필터
Progress
배열의 마지막 항목에 주어진 상태 (예 : "완료")가있는 모든 문서를 필터링하려고합니다. (일치해야 - 진행 배열의 마지막 국가가 "진행중"때문에)
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"에서 - 아마도 복잡성에 따라 갈 수있는 방법일까요?
샘플 문서가 당신이 결과로 기대하는 것입니다 : (어디 Styvane이 어떤 제안에
ProcessInfo.Progress
배열 덕분에 예상State
없이 문서를 필터링하도록 최적화) 다음 쿼리는 귀하의 예제 문서를 반환해야합니까? $ arrayElemAt를 사용하는 방식이 잘못되었습니다. 배열을 첫 번째 매개 변수로 받아들이는 반면 문자열을 전달하면 –