Условный этап конвейера агрегации Mongodb - PullRequest
0 голосов
/ 04 августа 2020

Есть ли способ создать чисто необязательный этап агрегации, скажем, на основе того, определена ли переменная? Например, могу ли я заставить оператор $ 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']],
          },
        },
      },
    ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...