1、需求
mongodb中存储了如下结构的数据
{
"_id": "A-34yODARDdJSZhQl80eI9",
"sn": "451289155251707905",
"props": {
"name": {
"value": "小王",
"prefix": "",
"suffix": ""
}
},
"propTables": {
"roomInfo": [{
"_id": "P0495-04-021-1-23-2302",
"status": "0",
"props": {
"signPaymentRatio": {
"value": "100.00",
"prefix": "",
"suffix": ""
},
"projectName": {
"value": "项目1",
"prefix": "",
"suffix": ""
}
}
}]
}
}
需要将propTables.roomInfo.signPaymentRatio.value的string类型数据改为long类型数据
其中propTables.roomInfo是数组
2、实现
db.coll.updateMany({"sn":"451289155251707905"},
[{ //使用aggregate更新
$set:{ //set方法进行更新,相当于addFields
"propTables.roomInfo":{ //新的字段名称,如果与已有的字段相同,则会自动覆盖。
$map:{ //使用map方法遍历
input:"$propTables.roomInfo",//遍历propTables.roomInfo
as:"r", //alias
in:{
"_id":"$$r._id", //保留_id
"status":"$$r.status", //保留status
"props":{
$mergeObjects: //使用mergeObjects方法实现long类型替换string类型
[
"$$r.props", //保留旧的props值
{signPaymentRatio:
{
value:{$toLong:{$toDecimal:"$$r.props.signPaymentRatio.value"}}, //转换得到long型的值
prefix:"",
suffix:""
}
}
]
}
}
}
}}
}]
)
参考链接
map