这里我有详细信息字段作为数组的文档:
{
"_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"
]
}
}
}
}
}
])
关于javascript - 如何在 mongodb 中映射对象数组并将字符串值转换为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67937042/