MongoDB添加字段取决于名称?

Posted

技术标签:

【中文标题】MongoDB添加字段取决于名称?【英文标题】:MongoDB Add Fields Depends on Name? 【发布时间】:2022-01-20 17:18:09 【问题描述】:
db.getCollection("user").aggregate([
    $match :  fname : "test1"  ,
    $addFields:  email_address : "test1@gmail.com"  ,
    $match :  fname : "test2"  ,
    $addFields:  email_address : "test2@gmail.com"  
])

我只想添加电子邮件地址取决于 fname 值。 此代码仅在没有 test2 时才有效,因此只有效一次但不要重复。 有什么方法可以重复匹配和添加字段?

【问题讨论】:

【参考方案1】:

您可以使用$switch 处理您的情况。

db.collection.aggregate([
  
    "$addFields": 
      "email_address": 
        "$switch": 
          "branches": [
            
              "case": 
                $eq: [
                  "$fname",
                  "test1"
                ]
              ,
              "then": "test1@gmail.com"
            ,
            
              "case": 
                $eq: [
                  "$fname",
                  "test2"
                ]
              ,
              "then": "test2@gmail.com"
            
          ]
        
      
    
  
])

这是Mongo playground 供您参考。

【讨论】:

【参考方案2】:

在一般情况下(如果适用的话):

db.getCollection("user").aggregate([
    $addFields:  email_address : $concat: ["$fname", "@gmail.com"] 
])

【讨论】:

以上是关于MongoDB添加字段取决于名称?的主要内容,如果未能解决你的问题,请参考以下文章

mongodb如何获取表结构,以及表字段的名称?

如何在mongodb中将字段添加到用户的帐户

使用mongodb和mongoose(nodejs)的不同字段名称映射多个数据源

如何从mongodb的表中读取各字段对应的类型

带有 $cond 的 MongoDB 聚合管道 $addFields - 无法使用变量

获取mongodb中最大计数的字段名称