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