Я не совсем понял кейса, это селф жоин по сути и не понимаю зачем делать лукап если можно по идее изначала написать матч с $or . Было бы не плохо если бы ты поделился исходной задачей, бо то что я предложил говницо)
Ну суть я уже описывал выше. Я ничего лучше не придумал как хранить зависимости между категориями. Выбрал путь Model Tree Structures with Parent References описанный в доках mongodb
https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-parent-references/ . То есть идея была такая, что у категории может быть один или несколько родительских категорий. Соответственно у родительской категории может быть также один или несколько своих родительских категорий и так до определенной вложенности. А суть бизнес задачи была такова, что нужен эндпоинт, который бы возвращал все родительские категори (до максимальной вложенности) определенного продукта в виде обычного списка, без необходимости прохода по каждой категории и не нужно смотреть существует ли ключ parents и содержит ли он какие-то данные. Так вот оператор $graphlookup по крайней мере мои требование выполняет отлично, он умеет искать эти вложенности, причем возвращает все вложенности в виде обычного списка. Единственная загвоздка была в том, что он возвращает этот список в ключ, то есть это ключ самой дочерней категории. А в список на выход мне надо было включить и эту самую дочерную категорию вместе с родительскими. Плюс все усложняется тем, что для этого всего нужно реализовать другие стандартные операции (пагинацию, lookup, сортировку и тд) поэтому подход через js рассматривал в самом крайнем случае.
P.S. Ваш подход решил все проблемы) Еще раз спасибо)