美文网首页
Mongodb实现数组字段更新之聚合

Mongodb实现数组字段更新之聚合

作者: 冬日11 | 来源:发表于2021-06-16 14:49 被阅读0次

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

mergeObjects

相关文章

网友评论

      本文标题:Mongodb实现数组字段更新之聚合

      本文链接:https://www.haomeiwen.com/subject/sqzxyltx.html