Mongodb агрегат с глубоким вложенным массивом - PullRequest
0 голосов
/ 24 апреля 2018

Здравствуйте, я пытался запросить данные json с помощью mongo db с агрегатной структурой, но застрял, вот данные:

[{ 
    "_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 голосов
/ 24 апреля 2018

Вам необходимо $ map для преобразования вашего внутреннего массива и $ size для получения длины массива.

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