javascript - 如何在 mongodb 中映射对象数组并将字符串值转换为数字?

标签 javascript mongodb mongodb-query aggregation-framework

这里我有详细信息字段作为数组的文档:

 {   
        "_id" : ObjectId("60ae0b29ab282518443c7ac5"),
        "details": [
              {
                "label": "Asset title",
                "value": "S1",
              },
              {
                "label": "Total Cost",
                "value": "250",
              },
              {
                "label": "Possession Status",
                "value": "Available",
              },
              {
                "label": "Estimated Monthly Rent",
                "value": "15.5",
              }
            ]
    },
    {   
        "_id" : ObjectId("60ae0b29ab282518443c7ac8"),
        "details": [
              {
                "label": "Asset title",
                "value": "S2",
              },
              {
                "label": "Total Cost",
                "value": "455.5",
              },
              {
                "label": "Possession Status",
                "value": "Available",
              },
              {
                "label": "Estimated Monthly Rent",
                "value": "30",
              }
            ]
    }

因此,我尝试通过映射对象数组来 $project 这个对象数组,并检查标签是否为“总成本”或“估计月租金”,然后我想将它们转换为字符串值转为数字。例如: if {label = "Total Cost"} ,则: {"$toDouble": value} 并且 if {label = "Estimated Monthly Rent"} ,然后:{"$toDouble": value}

我正在尝试此操作,但出现错误。

 db.collection.aggregate([
       {
             "$project": {
                                   
                    "data": {
                         "$map": {
                                "input": "$details", 
                                 "as": "val", 
                                 "in": {
                                 "$cond":{ if: {"$$val.label": "Total Cost"} , then: { "$toDouble" : "$$val.value"}},
                                 "$cond":{ if: {"$$val.label": "Estimated Monthly Rent"} , then: { "$toDouble" : "$$val.value"}}
                                  }
                         }
                     } 
              }
        }
    ])

最佳答案

使用$in运算符检查条件,如果匹配则返回转换后的值,否则返回现有对象

db.collection.aggregate([
  {
    "$project": {
      "data": {
        "$map": {
          "input": "$details",
          "as": "val",
          "in": {
            $cond: [
              { $in: ["$$val.label", ["Total Cost", "Estimated Monthly Rent"]] },
              {
                label: "$$val.label",
                value: { $toDouble: "$$val.value" }
              },
              "$$val"
            ]
          }
        }
      }
    }
  }
])

Playground

关于javascript - 如何在 mongodb 中映射对象数组并将字符串值转换为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67937042/

相关文章:

java - 如何使用 Java 在 Mongo 中添加和删除数组中的元素?

javascript - 当翻译在另一个集合中时,如何在 MongoDB 上处理 i18n(带回退)?

javascript - 如何在radioButtonList中获得选中的值

mongodb - ReplaceOne 抛出重复键异常

node.js - 如何解决 mongodb 上特定集的重复问题

mysql - 如何使用 MongoDB 聚合对唯一 ID 进行求和?

文档子集中的 MongoDB 流水号

javascript - 如何将动画添加到平均堆栈应用程序

javascript - 在 d3.js select 中使用条件

Javascript 正则表达式匹配并替换百分号