пн goose вернуть значение по умолчанию вместо нулевого значения - PullRequest
1 голос
/ 29 февраля 2020

У меня есть база данных mongodb, где у меня есть поля для имени и фамилии, которые являются необязательными и не могут быть установлены вообще.

однако мне нужно запросить их объединение для поиска полного имени, но если одно из имен не задано, возвращаемое значение конкатенации равно нулю.

есть ли способ вернуть / конкаталировать значение по умолчанию (пустую строку), если имя не задано?

Я не знаю, можно ли это сделать с помощью агрегатов $regex и $text, но я попытался сделать запрос с ними, и у меня появляется ошибка, что я не могу использовать их на своем уровне атласа .

Я хочу сделать что-то вроде:

db.User.aggregate([
      {
        $project: { firstName: '$firstName' || '' },
        $project: { lastName: '$lastName' || '' },
        $project: { fullName: { $concat: [$firstName, ' ', $lastName] } }
      }
    ]);

или даже:

db.User.aggregate([
  {
    $project: {
      firstNames: {
        $cond: {
          if: { $exists: [false] },
            then: '',
            else: '$firstName'
        }
      }
    },
    $project: {
      lastNames: {
        $cond: {
          if: { $exists: [false] },
          then: '',
          else: '$lastName'
        }
      }
    },
    $project: {
      fullName: {
        $concat: ['$firstNames', ' ', '$lastNames']
      }
    }
  }
]);

1 Ответ

1 голос
/ 29 февраля 2020

Вы можете использовать $ addFields , чтобы заменить начальные значения значениями по умолчанию. Оператор $ ifNull позволяет возвращать пустую строку, когда ее значение отсутствует.

db.collection.aggregate([
    {
        $addFields: {
            firstname: { $ifNull: [ "$firstname", "" ] },
            lastname: { $ifNull: [ "$lastname", "" ] },
        }
    },
    {
        $addFields: {
            fullName: { $trim: { input: { $concat: [ "$firstname", " ", "$lastname" ] } } }
        }
    }
])

Пн go Детская площадка

...