mongodb — объединить $addField с $exists

#mongodb

#mongodb

Вопрос:

У меня есть что-то вроде следующего:

 db.collection.aggregate(
    { $match: {...} },
    {
        "$addFields": {
            "assignee.fullName": { "$concat": ["$assignee.firstName", " ", "$assignee.lastName"] }
        }
    }
)
  

Проблема в том, что для документов, у которых нет свойства ‘assignee’, $addFields добавляет это:

 assignee: {fullName: null}
  

Итак, я ищу способ добавить поле только в том случае, если оно существует, в противном случае добавить:

 assignee: null
  

Комментарии:

1. mongoplayground.net/p/BifIupFt8if

Ответ №1:

Поскольку вы используете concat, он всегда будет предоставлять новое поле. Итак, что вы можете сделать, так это с помощью своего кода проверить условие

 {
    $addFields: {
      assignee: {
        $cond: [
          {
            $eq: [
              "$assignee.fullName",
              null
            ]
          },
          null,
          "$assignee"
        ]
      }
    }
  }
  

Рабочая игровая площадка Mongo