$redact
giai đoạn bắt đầu ở tài liệu gốc và các trường của nó và chỉ khi tài liệu đó đáp ứng điều kiện $$DESCEND
, nó kiểm tra các tài liệu con có trong tài liệu đó. Điều đó có nghĩa là điều đầu tiên $ redact làm với tài liệu của bạn là kiểm tra điều này:
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
Nó thậm chí không tìm thấy một loại type
tại đây, vì vậy $eq: [ "$type" , "exam" ]
là sai. Bạn đã yêu cầu $ redact làm gì khi điều kiện sai? else: "$$PRUNE"
, vì vậy toàn bộ tài liệu sẽ được lược bớt trước khi kiểm tra các tài liệu phụ.
Để giải quyết vấn đề, hãy kiểm tra xem $type
là "exam"
hoặc không tồn tại. Bạn đã không yêu cầu rõ ràng một giải pháp hiệu quả, vì vậy tôi sẽ để nó như một bài tập cho bạn để tìm ra cách thực hiện điều này.