Три ответа, потому что немного неясно, что вы спрашиваете:
1: Если вы выполняете агрегирование в своей программе и хотите, чтобы ваша программа сразу знала, почему у агрегации был пустой вывод, тогда ответ отрицательный: агрегация не возвращает эту информацию, и сервер не хранит это. Вашей программе может потребоваться выполнить дополнительные запросы для запроса данных, чтобы выяснить, какие дальнейшие действия необходимо предпринять.
2: Если вы запрашиваете ретроспективный анализ того, почему конкретный прогон агрегации, в определенную дату и время выдал свой вывод, то нет: нет способа узнать конечно. Вам потребуется журнал всех этапов агрегирования, с полным набором результатов в конце каждого этапа ; и MongoDB не ведет такую регистрацию (она была бы очень многословна и сложна в управлении).
3: Если вам нужен ретроспективный анализ того, почему конкретный прогон агрегации дал результат, и вы готовы и можете вручную восстановить данные по мере необходимости и вручную повторно выполнить запрос, затем отладьте его найти эффекты каждого этапа довольно просто: просто закомментируйте все этапы, кроме первого, и выполните агрегацию:
db.thingies.aggregate([
{ $match: { SOME_CONDITION } },
// { $redact: { $cond: { if: { SOME_PERMISSION_CHECK }, then: "$$KEEP", else: "$$PRUNE" } } }
]);
Анализ выходных данных этой агрегации; если все в порядке, тогда раскомментируйте следующий этап, запустите агрегацию и проанализируйте выходные данные - продолжайте, пока не обнаружите, на каком этапе возникла проблема.