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

Posted

技术标签:

【中文标题】猫鼬返回默认值而不是空值【英文标题】: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']
      
    
  
]);

【问题讨论】:

【参考方案1】:

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

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

Mongo Playground

【讨论】:

以上是关于猫鼬返回默认值而不是空值的主要内容,如果未能解决你的问题,请参考以下文章

如何设置TextBox空字符串的默认值而不是null

用 phpunit 模拟 symfony 安全,返回空值而不是布尔值(不使用预言)

在 JSON.Net 中处理不存在的 JSON 令牌如何返回默认值而不是抛出异常

SQL 列定义:默认值而不是空冗余?

Laravel 插入默认值而不是通过请求发送的数据

统一的 Firebase 远程配置仅获取默认值而不是真实值