首页 > 解决方案 > 如何在 mongoTemplate 上更新多级嵌入数组

问题描述

我使用 spring-data-mongo mongoTemplate 来更新嵌入文档。以下是我的数据模型:

{
    "_id":"3KNAM390aENt",
    "field":"test001",
    "name":"001",
    "sort":0,
    "embedFields1":{
        "_id":"1",
        "field":"field1",
        "name":"name1",
        "limit":1,
        "canBeChange":true,
        "needAudit":false,
        "embedFields2":{
            "_id":"22",
            "field":"field22",
            "name":"name22",
            "limit":1,
            "canBeChange":true,
            "needAudit":false,
            "embedFields3":{
                "_id":"3",
                "field":"field3",
                "name":"name3",
                "limit":1,
                "canBeChange":true,
                "needAudit":false,
                "embedFields4":{
                    "_id":"4",
                    "field":"field4",
                    "name":"name4",
                    "limit":1,
                    "canBeChange":true,
                    "needAudit":false,
                    "embedFields5":{
                        "_id":"5",
                        "field":"field5",
                        "name":"name5",
                        "limit":1,
                        "canBeChange":true,
                        "needAudit":false,
                        "embedFields6":{
                            "_id":"66",
                            "field":"field66",
                            "name":"name66",
                            "limit":1,
                            "canBeChange":true,
                            "needAudit":false
                        }
                    }
                }
            }
        }
    }
}

我知道如何使用 $ 来更新加工首先 embedFields1 ,但是如何更新嵌入 embedFields2,embedFields3,embedFields4.......?

标签: mongodbspring-data-mongodb

解决方案


要导航您的结构,您可以使用如下语法:

" firstlevel.secondlevel.thirdlevel"

这意味着您可以创建一个动态逻辑来创建该字符串并在 mongodb 命令中使用它。

例子

寻找

db.your_collection.find({"embedFields1.embedFields2.embedFields3._id" : "2"})

更新

db.your_collection.update({"embedFields1.embedFields2.embedFields3._id" : "3"} , {$set : {"embedFields1.embedFields2.embedFields3.name" : "test"}})

推荐阅读