如何使用 $eq 和 $cond 替换 mongodb 中的字符串

Posted

技术标签:

【中文标题】如何使用 $eq 和 $cond 替换 mongodb 中的字符串【英文标题】:How to replace a string in mongodb using $eq and $cond 【发布时间】:2021-09-19 11:05:04 【问题描述】:

我有一个包含人员及其信息(姓名、性别等...)的数据库 示例:


    "id": 31,
    "balance": "$1,137.95",
    "age": 24,
    "eyeColor": "blue",
    "name": "Burris Newton",
    "gender": "male",
    "company": "XOGGLE",
    "email": "burrisnewton@xoggle.com",

我想使用 $cond 将数据库中的性别替换为“H”和“F”替换“男性”

我已经写了这个,但它不起作用

db.contacts.aggregate([
    
        $project: 
            _id: 0,
            age: 1,
            name: 1,
            gender: 
                $cond: 
                    if: 
                        "gender": $eq: ["$gender", "male"],
                        then: "H",
                        else: "F"
                    
                
            
        
    
])

【问题讨论】:

你可以从$cond document找到正确的语法,更正这个if: $eq: ["$gender", "male"] @turivishal 这就是使用的东西,这就是为什么我不明白为什么它不起作用 再次验证两者是否不同 这是不正确的 > if: "gender": $eq: ["$gender", "male"] 这是正确的 > if: $eq: ["$gender", "male"] 【参考方案1】:

您想使用piplined updates,这适用于 Mongo 4.2+ 版本,如果您使用的是较低版本,则必须在代码中逐个迭代每个文档。

以下是使用此功能的代码示例:

db.collection.updateMany(
,
[
  
    "$set": 
      "gender": 
        $cond: [
          
            $eq: [
              "$gender",
              "male"
            ]
          ,
          "H",
          "F"
        ]
      
    
  
])

Mongo Playground

*请注意,如果文档可能缺少性别字段,那么您必须解决此问题,否则它们将获得 "F" 值。

【讨论】:

以上是关于如何使用 $eq 和 $cond 替换 mongodb 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Mongo $sum $cond 有两个条件

使用 $cond 运算符在我的 mongo 查询中添加一个字段

聚合框架中的 rmongodb $cond

"$cond"

通过文件传递 COND 的输入

mongo 更新字段值,若不存在则自动创建