MongoDB Tutorial: Menampilkan hanya nilai element yang di select dari Object dalam Array di Collection

Oleh: Admin - Sat, 21 December, 2019

MongoDB Aggregate Pipeline

MongoDB Aggregate Pipeline

yahallloooo...
lama tak cuit cuit nih sob lagi bertapa maklum hahhaaa, apakabar kalian semua? semoga sehat selalu dan dalam penjagaan-Nya ya sob. jaga kesehatan sob, udah masuk musim penghujan nih sekarang dinegeri +62. bengong dikit sekarang mah bukan cuma kesambet sob, bisa-bisa kita lupa ingatan malah hahahaa.
ehh tapi bener, habis pergantian musim tuh batuk pilek mesti mampir juga deh, kalo badan ga fit dikit bisa bisa betah tuh pirus. pengalaman ane sob kmaren, habis begadang semaleman besok paginya tepar hahahaaa. bangun-bangun ilang ingatan dah :D.

lah kbiasaan dah malah curcol, okeh kalo saran dari ane sih sedikit sob. buat musim penghujan gini jangan lupa bawa payung :D, hahahaa ini sepele tapi manfaatnya gede sob. jangan maleslah cuma payung doang, beratnya juga gak kek semen 1 sak, taro di tas udeh abis itu jangan dikeluarin biar lu ga lupa sob :p . selain payung ya paling, sering sering dah kelonan ama bini, hahahaha bini sendiri luuh yaa jangan bini orang. pan enak tuh ujan, dingin, kelonan, lengket, anget, basah, ehh buset kok jadi bahas ketan ya gw hahahaa. udah udah stop kelonannya tar malah jadi aja luuuh hahaha, lanjut bahasan serius sesuai judul ya.

bingung kan mau mulai darimana, hmmmm...
ada yang udah pernah pake MongoDB ?? ajarinlahh kami ini yang senang belajar :D
ane yang background nya masih RDBMS gini masih kbingungan sob ama yang namanya NoSql macem MongoDB ini. yang ada dikepala tuh mesti, nanti gimana bikin relasinya? terus kalo mau join kek gimana? lah ini make foreign-key n'ga? waduhhh makin banyak pertanyaan-pertanyaan macem gitu makin mumet ini kepala hahaha. nah salah satunya ini nih sob.

okelah gw udah baca sedikit tentang MongoDB ini dan bagaimana cara insert ke table/collection nya. untuk case relasi, bisa kita pakai reference atau paling gampang kita embeded aja langsung document nya kedalam table/collection. cara ke-2 ini lebih ringkas sih haahhaha tapi, ada tapinya nih, n'ga disarankan untuk embeded document yang berpotensi menjadi besar dan terus bertambah :D keknya sih gitu yang gw baca hahahaa.

langsung aja cekidot sample document gw yang nantinya kita mainkan query-query yang aduhai itu.

/* 1 */
{
    "_id" : ObjectId("5dfe2ca70c8b8355fe52f35b"),
    "title" : "Hello Wolrd!!",
    "notes" : [ 
        {
            "creator" : "admin",
            "message" : "first message!"
        }, 
        {
            "creator" : "admin",
            "message" : "second message!"
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5dfe2d010c8b8355fe52f370"),
    "title" : "Ticket #2",
    "notes" : [ 
        {
            "creator" : "user",
            "message" : "user first message!"
        }, 
        {
            "creator" : "admin",
            "message" : "admin create message here too!"
        }
    ]
}

gimana sob? udah kebayang kan?
nah kalo belom kebayang mending kalian cobain deh sendiri :p, oiya asumsi gw kalian udah pada ng'install MongoDB nya ya hhuuuu maap n'ga bikin tutorialnya insya allah kalo sempet nanti ane buat sekalian deh, ehh tapi ane aja running MongoDB nya pake Docker hahahahaa upppssss.

oke lanjut, dari data diatas gw mau cari semua notes yang creator nya admin, inget yaa creatornya admin. jadi kalo masih muncul creator selain admin itu n'ga tepat. dan kalian tahu? ternyata ribet banget sob hahahaaaa nih dibawah penampakannya.

db.getCollection('ticket_request').aggregate([
    {
        $match: {"notes.creator": "admin"}
    },
    {
        $project: {
            notes: {
                $filter: {
                    input:"$notes", 
                    as: "n", 
                    cond: { $and: [ 
                            {$eq: ["$$n.creator", "admin"]},
                        ] 
                    }
                }
            },
            _id:0
        }
    }
])

ane ampe bingung gmn mo ng'jelasinnya tuh syntax, kalian nanti baca sendiri aja lah ya di documentasi MongoDB nya :D

itu baru 1 kondisi sob terus kalo misal, gw butuh semua notes yang creatornya user dan message nya mengandung kata first, nah loohhhh bingung dah.
setelah ngobrol banyak sama mbah terus rajin baca-baca manga one piece dokumentasinya akhirnya dapet nih sob, cekidot lah sekripnya

db.getCollection('ticket_request').aggregate([
    {
        $match: {"notes.creator": "user", "notes.message": {$regex: /first/}}
    },
    {
        $project: {
            notes: {
                $filter: {
                    input:"$notes", 
                    as: "n", 
                    cond: { $and: [ 
                            {$eq: ["$$n.creator", "user"]},
                            {$regexMatch: {input: "$$n.message", regex: /first/}}
                        ] 
                    }
                }
            },
            _id:0
        }
    }
])

wah udah banyak juga nih gw nulisnya, rekor banget nih hahahaa
untuk sekarang cukup sampe sini dulu lah ya sob, udeh males nulis plus ngantuk pula. yang penting tetep semangat buat belajar.

sampai jumpa lain waktu, semoga bermanfaat
wassalam.