Sunday, September 22, 2013

MongoDB Part 2: Operasi Dasar Manipulasi Data


Tulisan ini merupakan kelanjutan dari MongoDB part 1: Pengenalan Document-Oriented MongoDB. Pada part 2 ini saya akan memberikan beberapa perintah-perintah dasar yang dapat Anda lakukan untuk manipulasi document pada mongoDB. Tapi sebelum itu, saya tulis juga tutorial singkat instalasi MongoDB pada platform Windows dan Linux.

Installing MongoDB

MongoDB tersedia untuk platform Windows, Linux, Mac OS X, dan Solaris. Anda dapat menemukan dan men-download mongoDB pada alamat resmi mongoDB. Instalasinya cukup mudah untuk diikuti, berikut adalah cara menginstall database ini pada Windows dan Linux

Windows Install
Download windows zip pada halaman download mongodb disini. Ada dua pilihan untuk windows, 32-bit dan 64-bit version. Pilih salah satu sesuai dengan komputer kerja Anda. Download dan kemudian ekstrak pada direktori komputer.
Sampai disini Anda sudah dapat menjalankan mongo server dengan mengetikkan perintah berikut pada command line :
> bin\mongod.exe
Secara default semua berkas file database Anda akan tersimpan pada sebuah folder C:\data\db. Namun, jika Anda telah menyiapkan folder lain, anda dapat mendefinisikannya dengan memberikan parameter –-dbpath.
> bin\mongod.exe --dbpath C:\Documents and Settings\Username\My Documents\db
Untuk menjalankannya sebagai sebuah service, Anda dapat memberikan parameter -install. Selanjutnya Anda dapat menjalankan atau menghentikan mongoDB pada control panel Windows Anda.
 > bin\mongod.exe --install
Linux Install
Untuk versi Linux dan Mac OS dapat juga anda temukan pada halaman download MongoDB. Download dan kemudian decompress .tar.gz yang Anda dapatkan.
$ tar zxf mongodb-linux-i686-1.6.0.tar.gz
Sama seperti Windows install, Anda harus menyiapkan sebuah folder untuk menyimpan berkas file database. Buat folder baru dan setting permissionnya agar folder writable oleh MongoDB.
$ mkdir -p ~/db
$ chown -R $USER:$USER ~/db
Setelah menyiapkan folder database Anda dapat menjalankan MongoDB dengan --dbpath folder database Anda.
$ cd mongodb-linux-i686-1.6.0
$ bin/mongod --dbpath ~/db

Shell client mongoDB

MongoDB dilengkapi dengan Javascript shell client untuk para administrator dalam memanipulasi data. Shell client ini dapat dijalankan dengan perintah berikut:
$ bin/mongo
Perintah diatas menghubungkan Anda dengan service mongod yang jalan pada komputer yang sama, tetapi jika service berada pada server lain, Anda dapat menambahkan alamat server dan port nya seperti ini:
$ bin/mongo db.mimicreative.net:20000
Yang menarik dari shell ini adalah fitur connect yang dapat menghubungkan anda ke beberapa server cluster yang Anda punya. Caranya pun sangat mudah, Anda hanya memanggil method connect() dan kemudian menyimpannya pada sebuah variabel.
> mongos = connect("localhost:27017") connecting to: localhost:27017 localhost:27017
> shard0 = connect("db0.mimicreative.net:30000") connecting to: db0.mimicreative.net:30000 db0.mimicreative.net:30000
> shard1 = connect("db1.mimicreative.net:30001") connecting to: db1.mimicreative.net:30001 db1.mimicreative.net:30001
Contoh diatas, menghubungkan anda ke tiga server cluster. Ketiga server cluster itu kemudian diwakili oleh tiga variabel mongos, shard0 dan shard1. Untuk ulasan lebih lengkap mengenai ini, akan saya tulis pada bagian ketiga dari artikel ini.

Creating Document

Membuat document pada mongoDB dapat dilakukan dengan memanggil method insert yang ada pada masing-masing collection.
> db.post.insert({});
Pada perintah ini, objectid (_id) akan secara otomatis di-generate dan ditambahkan pada document.

Removing Document

Menghapus document pada sebuah collection dapat dilakukan dengan memanggil method remove().
> db.post.remove();
Perintah ini akan menghapus semua document yang ada pada collection post. Perintah remove ini menghapus semua document tapi tidak dengan collection dan semua index yang telah ada. Anda juga dapat menambahkan beberapa kriteria sebagai parameter pada method ini, sehingga hanya kriteria yang sesuai yang akan dihapus.
> db.post.remove({"title":"MongoDB"});

Updating Document

Untuk mengedit sebuah document, dapat memanfaatkan method update() yang juga ada pada collection. Method ini menerima dua parameter, pertama query atau kriteria document dan kedua document yang sudah anda edit. Contoh kasus ketika Anda ingin menambahkan "slug", mengubah last_modifikasi dan menghapus field parent_post yang ada pada document post.
{
"_id": ObjectId("4b2b9f67a1f631733d917a7a"),
"title": "Mongodb part II", "parent_post" : ObjectId("4b2b9f67a1f631733d913a1a"), "last_modifikasi": "Sat Jul 14 2012 11:30:02 GMT+0700 (WIT)";"content": "Lorem ipsum dolor sit amet", "pageviews":1 }
Maka perintah yang dapat anda ikuti untuk melakukan itu semua adalah seperti ini:
> thepost=db.posts.findOne({"title":"Mongodb part II"}); > thepost.slug = "mongodb-part-II"; > delete thepost.parent_post; > thepost.last_modifikasi = new Date();> db.posts.update({"title":thepost.title},thepost);
Update Modifiers
Modifiers ini berupa beberapa specials key yang akan sangat membantu Anda dalam hal updating document. Banyak specials key yang dapat anda gunakan disini, tapi saya akan contohkan beberapa saja seperti $inc, $set dan $push.
Modifiers $inc bisa anda gunakan untuk increment data number, contohnya ketika Anda ingin increment post view pada document.
> db.posts.update({"title" : "Mongodb part II"}, {"$inc" : {"pageviews" : 1}});
Perintah update diatas akan membuat pageviews yang sebelumnya bernilai 1 menjadi 2. Modifiers yang kedua adalah $set, sesuai namanya modifiers ini digunakan untuk mengganti value pada key, tapi jika key tidak ada maka secara otomatis akan ditambahkan. Contoh ketika anda ingin memberikan atau mengganti key "author" pada document post.
> db.post.update({"title":"Mongodb part II"},{"$set" : {"author" : "mustofa"}});
Modifiers $set ini juga dapat mengakses key pada embedded document, semisal Anda hanya ingin mengubah key "name" pada document ini
{
"_id": ObjectId("4b2b9f67a1f631733d917a7a"),
"title": "Mongodb part II", "author":{ "website:"http://blog.uin-malang.ac.id/mustofa" "name":"john doe", "email":"goo.muse@gmail.com", } "content": "Lorem ipsum dolor sit amet", }
maka perintah yang harus Anda lakukan adalah
> db.posts.update({"author.name" : "john doe"}, {"$set" : {"author.name" : "mustofa"}})
Modifiers terakhir adalah $push. Modifiers ini menambahkan element pada value yang bertipe array. Jika key tidak ada, secara otomatis membuat key dan element yang baru di push menjadi element pertama. Contohnya seperti anda menambahkan "comment" pada document post.
{
"_id": ObjectId("4b2b9f67a1f631733d917a7a"),
"_id": ObjectId("4b2b9f67a1f631733d917a7a"), "title": "Mongodb part II", "comments"[ { "content":"...." "name":"john doe", "email":"doe.john@gmail.com", }, ... ] }
maka ketika Anda ingin menambahkan komentar baru, Anda dapat melakukannya seperti ini :
> db.blog.posts.update({"title" : "Mongodb part II"}, {$push : {"comments" :{"name" : "josh", "email" : "josh@gmail.com", "content" : "nice post."}}});
Cukup tiga modifier itu saja yang dapat saya berikan, dan tentunya banyak modifier yang harus anda pelajari untuk updating data document. Silahkan buka link ini untuk mempelajari semua modifier yang dapat digunakan updating data.

Read Document

Untuk membaca document MongoDB, Anda dapat mengandalkan dua method ini, find() dan findOne()Method find() mengembalikan array document sedangkan findOne() hanya mengembalikan document tunggal pada sebuah collection.
> db.posts.find();
Memanggil find() tanpa ada query yang dimasukkan, seperti pada perintah diatas, akan mengembalikan semua document yang ada pada collection tersebut. Melakukan query pada find() cukup simple untuk dilakukan. Misalnya Anda menginginkan semua document yang memiliki sebuah "title" dan ditulis oleh seorang "author", maka Anda dapat melakukannya seperti berikut:
> db.posts.find({"title":"Mongodb part II","author.name":"mustofa"});
Method find() dan findOne() sebenarnya memiliki dua parameter, yang pertama adalah query seperti contoh diatas, dan yang kedua adalah option output keys document. Jika anda tidak mendefinisikan parameter kedua ini, maka secara default semua key yang ada pada document output akan dimunculkan. Hal ini tentunya tidak bagus jika Anda hanya membutuhkan beberapa key dari document tapi yang muncul semua. Dengan mendefinisikannya, Anda dapat mengatur key apa saja yang akan di ikut sertakan dalam document output.
> db.posts.find({},{"title":1,"author":1});
Contoh perintah diatas melakukan query dan hanya key "title" dan "author" saja yang akan diambil sebagai keluaran pada document.
Banyak operator yang dapat Anda gunakan untuk melakukan query document. Operator apa saja yang dapat dipakai untuk melakukan query, dapat Anda baca pada disini. Tapi disini tiga operator saja yang akan saya sebutkan.

Operator pertama adalah $in. Query dengan operator ini, akan mengembalikan semua document yang cocok dengan elemen-elemen yang diberikan padanya. Contoh pemanfaatannya semisal anda ingin mengambil semua document dari author john doe, josh, dan jeni, maka perintah yang dapat dilakukan adalah seperti ini:
> db.posts.find({"author.name":{$in:["john doe","josh","jeni"]}});
Operator yang kedua adalah $or. Operator ini memiliki fungsi yang sama dengan $in, bedanya $in melakukan fungsi OR hanya pada satu key dan $or melakukannya pada lebih dari satu key. Contohnya, mengambil semua document yang "created" dan "last_modified" pada hari ini, maka dapat dilakukan dengan:
> db.posts.find({$or:[{"created": new Date()},{"last_modified": new Date()}]});
Terakhir yaitu operator $not. Operator ini kebalikan dari $in, dimana akan mengembalikan document yang tidak termasuk pada elemen-elemen yang ada padanya. Contohnya anda ingin mengambil semua document kecuali document dengan author josh dan john doe, maka perintah yang dapat anda lakukan adalah:
> db.posts.find("author.name":{$not:["john doe","josh"]});

Kesimpulan

Sebenarnya masih banyak bahasan pada topik ini. Semua itu harus dipelajari jika anda memilih menggunakan database jenis ini. Anda dapat menemukan semuanya pada dokumentasi yang sudah disediakan oleh mongodb pada link ini.

Pada part 3 yaitu part terakhir dari tulisan ini, saya akan mengulas sharding process dalam rangka mempartisi data ke beberapa mesin di MongoDB.

Artikel ini pernah dimuat pada BisaKomputer.com tertanggal 16 Julai 2012

No comments:

Post a Comment