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

Javascript 如何在mongodb中映射对象数组并将字符串值转换为数字?,javascript,mongodb,mongodb-query,aggregation-framework,Javascript,Mongodb,Mongodb Query,Aggregation Framework,在这里,我将文档的详细信息字段设置为数组: { "_id" : ObjectId("60ae0b29ab282518443c7ac5"), "details": [ { "label": "Asset title", "value": "

在这里,我将文档的详细信息字段设置为数组:

 {   
        "_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
此对象数组,然后我想将其字符串值转换为数字。例如:如果
{label=“Total Cost”}
,那么:
{“$toDouble”:value}
,如果
{label=“Estimated month 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
字段中使用了两个
$cond
键,仅使用了一个and use
$或
运算符。另一件事是在聚合管道中使用
$eq
进行相等匹配,最后不要错过
$cond
中的else子句

此查询可用于:

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

检查它是否正常工作。

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

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"
            ]
          }
        }
      }
    }
  }
])

在输出中,它只给出了值结果,我想要的是细节数组的结构,只是转换总成本和估计月租金的值。我也是这方面的初学者,所以我在这里有点困惑。