В агрегации я добавляю некоторые поля с помощью поиска, а затем выполняю некоторые дальнейшие операции над ними на более поздних стадиях агрегации.Однако иногда поля являются нулевыми - в этом случае агрегация просто добавляет другие поля, которые также являются нулевыми, чего я бы хотел избежать.В частности, скажем, у меня есть следующие структуры:
Таблица A:
{_id, foreignID, others}
Таблица B:
{_id, foreignC, other data}
Таблица C:
{_id, other data}
И в своей агрегации я выполняю что-то по следующим этапам:
- таблица поиска B через foreignID, как включеноB
- Выполнение некоторых операций, включая проект, который должен включать ForeignCпотому что он мне понадобится позже
- справочная таблица C через включенный B.foreignC
- Выполнение некоторых операций проекта при последнем поиске
Проблема возникает, когда foreignC имеет значение null.Мне все еще нужно включить его в мои первоначальные проекты, иначе я не смогу выполнить последний поиск, если он не равен нулю, но если это так, он просто включается, и с ним происходят операции, которые также добавляют дочерние поля, которые также являются нулевыми.
Как мне этого избежать?
В данный момент я получаю результат, примерно такой:
{_id: ..., foreignB: {_id: ..., foreignC: {other data: null}, other data: ...}, data: ...}
Когда мне хочется этого:
{_id: ..., foreignB: {_id: ..., other data: ...}, data: ...}
Если бы я мог указать unwind, чтобы исключить только поле, а не весь документ, когда сказал preservePaths = false, это решило бы мою проблему.