嵌套数组

时间:2016-05-10 14:23:55

标签: java spring mongodb spring-boot spring-data

我有一个名为firma的mongo集合,其中有一个文档结构如下:

 {
    "_id" : ObjectId("5729af099b3ebf1d0ca7ff05"),
    "musteriler" : [ 
        {
            "_id" : "de0bf813-b707-4a8d-afc2-9752e05c3aa5",
            "yetkiliListesi" : [ 
                {
                    "_id" : "a5e487fa-2034-4817-94f2-3bd837b76284",
                    "ad" : "Burak",
                    "soyad" : "Duman 1",
                    "cepTel" : "3333333333333",
                    "mail" : "asdf@asdf.com"
                }, 
                {
                    "_class" : "com.bisoft.entity.MusteriYetkili",
                    "_id" : "bc4b537d-522a-4c9a-9f67-8ca243e18f46",
                    "ad" : "Ridvan",
                    "soyad" : "ENİŞ",
                    "cepTel" : "222222222222",
                    "mail" : "asdf@asdf.com"
                }
            ]
        }
    ],
    "defaultTimezone" : "Europe/Istanbul"
    }

在上面的json中,我需要更新第二个数组的元素(yetkiliListesi)_id =“a5e487fa-2034-4817-94f2-3bd837b76284”

由于我使用的是java应用程序(使用mongo java驱动程序和spring boot MongoTemplate)来访问它并执行此查询:

 mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is("5729af099b3ebf1d0ca7ff05").and("musteriler.yetkiliListesi._id").is("a5e487fa-2034-4817-94f2-3bd837b76284")), 
            new Update().set("musteriler.yetkiliListesi.$", yetkiliDBO), Firma.class);

在上面的查询中,yetkiliDBO是一个BasicDBObject及其内容:

yetkiliDBO = { 
    '_class': 'com.bisoft.entity.MusteriYetkili', 
    '_id': "a5e487fa-2034-4817-94f2-3bd837b76284", 
    'ad': 'wer', 
    'soyad': 'xyz', 
    'cepTel': "222222222222",
     mail: "asdf@asdf.com" 
}

执行我的查询时出错

com.mongodb.WriteConcernException: { "serverUsed" : "192.168.2.250:27017" , "ok" : 1 , "n" : 0 , "updatedExisting" : false , "err" : "cannot use the part (musteriler of musteriler.yetkiliListesi.0) to traverse the element 

我需要做什么?

1 个答案:

答案 0 :(得分:1)

您无法使用' $'遍历嵌套数组时占位符。

  

位置$运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$ placeholder的替换是单个值

source

我建议将您的数据重组为单独的,嵌套较少的集合。