猫鼬返回默认值而不是空值

guy*_*guy 4 null mongoose mongodb

我有一个集合,其中包含名字和姓氏的字段,这些字段是可选的并且根本无法设置。

但是,我需要查询它们的串联以搜索全名,但如果未设置其中一个名称,则串联的返回值为 null。

如果未设置名称,有没有办法返回/连接默认值(空字符串)?

我想做类似的事情:

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

甚至:

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']
      }
    }
  }
]);
Run Code Online (Sandbox Code Playgroud)

mic*_*ckl 7

您可以使用$addFields将初始值替换为默认值。$ ifNull运算符允许您在没有值时返回空字符串。

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

蒙戈游乐场