0

Hello I tried to querying json data with mongo db with aggregate framework but get stuck, here's the data :

[{ 
    "_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"
                }
            ]
        }
    ]
}]

what I want to achieve is to display the total amount of array "list" inside each element in array "jenis_wisata", here's the expected result that I want to achieve:

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

Really appreciate your help here, Thanks

1 Answer 1

1

You need $map to transform your inner array and $size to get the length of an array.

db.collection.aggregate([
   {
       $project: {
          kabupaten: 1,
          jenis_wisata: {
             $map: {
                 input: "$jenis_wisata",
                 as: "element",
                 in: {
                    jenis: "$$element.jenis",
                    total: { $size: "$$element.list" }
                 }
              }
           }
       }
   }
])
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.