首页 > 解决方案 > 我如何为 mongodb(cmd) "Update Doctors Set Talent=Talent.Replace(" ","&").ToLower()" 创建这个查询

问题描述

我有很多数据,所以我用 windows cmd 编写,我的查询。

我以这种方式使用 mssql

Update Doctors Set Talent=Talent.Replace(" ","&").ToLower()

如何为 mongodb 创建?

标签: sqlmongodb

解决方案


如果您的 MongoDB 版本至少为 4.2,如果您的Talent属性是单个字符串值,则可以将 updateMany 与单阶段聚合管道一起使用:

db.Doctors.updateMany(
  {},
  [{
    $set: {
      Talent: {
        $toLower: { // Make it lowercase
          $substr: [ // Remove the initial '&' that got added while putting it back together
            {
              $reduce: {
                input: { $split: ['$Talent', ' ']}, // Take it apart
                initialValue: '',
                in: { $concat: [ '$$value', '&', '$$this']} // Put it back together with '&' in place of ' '
              }
            }, 
            1,
            -1
          ]
        }
      }
    }
  }
])

如果你的Talent属性是一个字符串数组,你还需要映射它:

db.Doctors.updateMany(
  {},
  [{
    $set: {
      Talent: {
        $map: {
          as: 'singleTalent', 
          input: '$Talent',
          in: {
            $toLower: { 
              $substr: [ 
                {
                  $reduce: {
                    input: { $split: [ "$$singleTalent", ' ']}, 
                    initialValue: '',
                    in: { $concat: [ '$$value', '&', '$$this']} 
                  }
                }, 
                1,
                -1
              ]
            }
          }
        }
      }
    }
  }
])

推荐阅读