$redact
ステージはルートドキュメントとそのフィールドから始まり、そのドキュメントが$$DESCEND
の条件を満たす場合にのみ開始されます 、そのドキュメントに含まれるサブドキュメントを調べます。つまり、$ redactがドキュメントで最初に行うことは、これを調べることです。
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"student_id" : 0,
"class_id" : 2,
"scores" : [] // Some array. I will look at this later.
}
type
も見つかりません ここにフィールドがあるので、$eq: [ "$type" , "exam" ]
は偽です。条件が偽の場合、$ redactに何をするように指示しましたか? else: "$$PRUNE"
、したがって、サブドキュメントが検査される前に、ドキュメント全体が整理されます。
回避策として、$type
かどうかをテストします "exam"
のいずれかです または存在しません。実用的な解決策を明示的に求めていなかったので、これを行う方法を理解するための演習として残しておきます。