具有深嵌套数组的Mongodb聚合

时间:2018-04-24 16:19:33

标签: arrays json mongodb mongodb-query aggregation-framework

你好我试图用mongo db和聚合框架查询json数据但是卡住了,这里是数据:

[{ 
    "_id" : ObjectId("5adf2294bc832359aa9bc710"), 
    "kabupaten" : "Badung", 
    "jenis_wisata" : [
        {
            "jenis" : "resto", 
            "list" : [
                {
                    "nama_resto" : "Warung Nasi Ayam Bu Oki", 
                    "alamat" : "Bukit Jimbaran"
                }, 
                {
                    "nama_resto" : "Warung Pojok Segitiga Emas", 
                    "alamat" : "Bukit Jimbaran"
                }
            ]
        }, 
        {
            "jenis" : "gunung", 
            "list" : [
                {
                    "nama_gunung" : "gunung_1", 
                    "alamat" : "alamat_1"
                }, 
                {
                    "nama_gunung" : "gunung_1", 
                    "alamat" : "alamat_1"
                }
            ]
        }
    ]
},{ 
    "_id" : ObjectId("5adf2294bc832359aa9bc711"), 
    "kabupaten" : "Denpasar", 
    "jenis_wisata" : [
        {
            "jenis" : "resto", 
            "list" : [
                {
                    "nama_resto" : "Warung Nasi Ayam Bu Oki", 
                    "alamat" : "Bukit Jimbaran"
                }, 
                {
                    "nama_resto" : "Warung Pojok Segitiga Emas", 
                    "alamat" : "Bukit Jimbaran"
                }
            ]
        }, 
        {
            "jenis" : "gunung", 
            "list" : [
                {
                    "nama_gunung" : "gunung_1", 
                    "alamat" : "alamat_1"
                }, 
                {
                    "nama_gunung" : "gunung_1", 
                    "alamat" : "alamat_1"
                }
            ]
        }
    ]
}]

我想要实现的是显示数组的总量" list"在数组" jenis_wisata"中的每个元素内,这里是我想要达到的预期结果:

[{  
    "kabupaten" : "Badung", 
    "jenis_wisata" : [
        {
            "jenis" : "resto", 
            "total" : 2
        }, 
        {
            "jenis" : "gunung", 
            "total" : 2
        }
    ]
},{  
    "kabupaten" : "Denpasar", 
    "jenis_wisata" : [
        {
            "jenis" : "resto", 
            "total" : 2
        }, 
        {
            "jenis" : "gunung", 
            "total" : 2
        }
    ]
}]

非常感谢您的帮助,谢谢

1 个答案:

答案 0 :(得分:1)

您需要$map来转换内部数组,并$size来获取数组的长度。

db.collection.aggregate([
   {
       $project: {
          kabupaten: 1,
          jenis_wisata: {
             $map: {
                 input: "$jenis_wisata",
                 as: "element",
                 in: {
                    jenis: "$$element.jenis",
                    total: { $size: "$$element.list" }
                 }
              }
           }
       }
   }
])