【问题标题】:MongoDB Add Fields Depends on Name?MongoDB添加字段取决于名称?
【发布时间】: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 时才有效,因此只有效一次但不要重复。 有什么方法可以重复匹配和添加字段?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案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"]} }}
      ])
      
      

      【讨论】:

        猜你喜欢
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 1970-01-01
        相关资源
        最近更新 更多