Есть ли способ создать чисто необязательный этап агрегации, скажем, на основе того, определена ли переменная? Например, могу ли я заставить оператор $ cond продолжить агрегирование конвейера, если поле существует, иначе вернуть объект root?
const thread = await BasePost.aggregate([
{
$match: { _id: ObjectId(_id) },
},
// if $parent exists, continue with pipeline
// else return $root object found
{
$graphLookup: {
from: 'baseposts',
startWith: '$parent',
connectFromField: 'parent',
connectToField: '_id',
as: 'anteriorThread',
},
},
{
$unwind: '$anteriorThread',
},
{
$sort: { 'anteriorThread.depth': 1 },
},
{
$group: {
_id: '$_id',
anteriorThread: { $push: '$anteriorThread' },
root: { $first: '$$ROOT' },
},
},
{
$project: {
finalAnterior: {
$concatArrays: ['$anteriorThread', ['$root']],
},
},
},
]);