Исключить этап агрегации, если он создает пустые поля - PullRequest
0 голосов
/ 27 июня 2019

В агрегации я добавляю некоторые поля с помощью поиска, а затем выполняю некоторые дальнейшие операции над ними на более поздних стадиях агрегации.Однако иногда поля являются нулевыми - в этом случае агрегация просто добавляет другие поля, которые также являются нулевыми, чего я бы хотел избежать.В частности, скажем, у меня есть следующие структуры:

Таблица 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, это решило бы мою проблему.

...