【问题标题】:mongoose return default value instead of null value猫鼬返回默认值而不是空值
【发布时间】:2020-06-13 09:01:16
【问题描述】:

我有一个 mongodb 数据库,其中我的名字和姓氏字段是可选的,根本无法设置。

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

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

我不知道是否可以通过使用聚合 $regex$text 来完成,但我尝试使用它们进行查询,但我得到一个错误,我无法在我的 atlas 层中使用它们。

我想做类似的事情:

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']
      }
    }
  }
]);

【问题讨论】:

    标签: database mongodb mongoose nosql


    【解决方案1】:

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

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

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2019-06-22
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多