Hands-On MongoDB
MongoDB adalah sebuah cross-platform database yang berorientasi dokumen. Database ini masuk dalam kategori database NoSQL yang artinya cara pengaksesan database tidak menggunakan SQL (Structured Query Language).
MongoDB menggunakan document-based query language dengan sintaks mirip JSON (JSON-like syntax). Seperti database NoSQL pada umumnya, MongoDB tidak memerlukan predefined structure terhadap data yang akan disimpan.
Pada saat tulisan ini dibuat, MongoDB sangatlah luas penggunaannya mulai dari pengembangan website hingga sistem robotika. MongoDB mempunyai beberapa kelebihan diantaranya high performance, high availability, high scalability, dinamis, dan fleksibel. MongoDB relatif lebih cepat dibandingkan dengan sistem SQL database pada umumnya.
Sedangkan kekurangan database ini ialah cenderung tidak memenuhi properti ACID (Atomic, Consistency, Isolation, Durability) sebagai bentuk dari trade-off fleksibilitas yang ditawarkan.
Download dan Install MongoDB
- Download MongoDB Community Server di https://www.mongodb.com/download-center/community
Sesuaikan dengan sistem operasi yang anda gunakan - Lakukan instalasi dengan mengikuti dokumen Installation Instructions yang juga dapat Anda download di halaman yang sama
- Tambahkan path mongodb agar mongodb shell dapat langsung dijalankan melalui terminal/command prompt
Windows: https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-windows/#run-mongodb-community-edition
Linux: https://docs.mongodb.com/v3.2/administration/install-on-linux/ - Jalankan MongoDB sebagai background process
Windows: net start MongoDB
Linux: sudo service mongod start
Hands-On
Download contoh database hasil export di sini. Cara mengimport lihat section paling bawah.
Mengakses MongoDB shell
mongo
Clear Screen
cls
Melihat daftar database
show dbs
Menciptakan dan menggunakan database
Format: use <db-name>
Contoh:use shinobi
Melihat database yang sedang digunakan
db
Membuat pengguna database
Format:
db.createUser({
user: “<nama>”,
pwd: “<password>”,
roles: [
{ role: “<role>”, db: “<database>” } | “<role>”, …
]
});
Penjelasan lebih lanjut tentang kreasi akun user: https://docs.mongodb.com/manual/reference/method/db.createUser/
MongoDB menyimpan record/dokumen ke dalam suatu collection. Satu database biasa terdiri dari beberapa collection. Collection ini mirip seperti table/relation pada relational database.
Melihat daftar collection
show collections
Menciptakan collection
Format: db.createCollection(‘<nama-collection>’);
Contoh: db.createCollection(‘shinobi’);
Menambahkan dokumen ke dalam collection (insert)
Format: db.collection.insert(<JSON-OBJECT>);
Contoh:
db.shinobi.insert({
first_name: “Naruto”,
last_name: “Uzuma”,
age: 32,
address: {
planet: “earth”,
village: “konohagakure”
},
natureType: [“lava”, “boil”, “wind”]
});
Menambahkan banyak dokumen sekaligus (batch insert)
Format: db.collection.insert([<JSON-OBJECT1>, <JSON-OBJECT2>, …]);
Contoh:
db.shinobi.insert([
{first_name: “Madara”, last_name: “Uchiha”},
{first_name: “Hashirama”, last_name: “Senju”, rank: “kage”}
]);
Salah satu kelebihan NoSQL database ialah fleksibilitas data. Data yang tersimpan di collection tidak diharuskan mengikuti suatu pre-defined schema tertentu, boleh berbeda.
Menampilkan daftar semua dokumen di suatu collection
Format: db.collection.find();
Contoh: db.shinobi.find();
Menampilkan daftar semua dokumen yang memenuhi kondisi
Format: db.collection.find(<JSON-OBJECT>);
Contoh:
db.shinobi.find({
last_name: “Uzumaki”
}); // mencari dokumen yang mempunyai last_name = “Uzumaki”db.shinobi.find({
“address.village”: “konohagakure”
}); // objek dengan level lebih dalam diakses dengan titik “.”db.shinobi.find({
natureType: “wind”
}); // mencari dokumen berdasarkan nilai yang berada di dalam array
Mencari dokumen dengan conditional statement query, menggunakan modifier $or
.
Contoh:
db.shinobi.find({
$or: [
first_name: “Naruto”,
last_name: “Uchiha”
]
}); // mencari dokumen dengan first_name = “Naruto” atau last_name = “Uchiha”
Menggunakan $lt
(less than) atau $gt
(greater than) khusus untuk field bertipe number.
Contoh: db.shinobi.find({age: {$gt: 40}});
Tampilan hasil query dari method find dapat dimodifikasi dengan tambahan method sort()
.
Format: db.collection.find(<JSON-QUERY>).sort(<JSON-SORT-BY>);
Contoh:
db.shinobi.find({last_name: “Otsutsuki”}).sort({age: 1});
// mengurutkan berdasarkan umur secara menaik (ascending)db.shinobi.find({last_name: “Otsutsuki”}).sort({age: -1});
// mengurutkan berdasarkan umur secara menurun(descending)
Hasil query juga dapat dihitung dengan method count()
Format: db.collection.find().count();
Ataupun dibatasi dengan method limit()
Format: db.collection.find().limit(<limit>);
Contoh: db.shinobi.find().limit(5);
Tampilan hasil query dapat dimodifikasi sesuai dengan keinginan user menggunakan user defined function pada forEach()
Contoh:
db.shinobi.find().forEach(function(doc){
print(“First name: “ + doc.first_name)
});
[Screenshot hasil]
Menampilkan dokumen dengan lebih “cantik”
Format: db.collection.find().pretty();
Contoh: db.shinobi.find().pretty();
Mengubah dokumen (update)
Format: db.collection.update(<JSON-OBJECT-QUERY>, <OBJECT>);
Contoh: db.customer.update({first_name: “Madara”}, {first_name: “Sasuke”, last_name: “Uchiha”});
Update method akan mengganti semua dokumen yang sesuai (match) dengan <JSON-OBJECT-QUERY> menjadi <OBJECT>. Jika Anda hanya ingin menambahkan suatu field ke dalam dokumen tanpa mengubah isi field lain, gunakan modifier $set
.
Contoh: db.customer.update({first_name: “Madara”}, {$set: {kekkaiGenkai: “fire”}); // menambahkan field kekkaiGenkai ke dalam document, tidak merubah field lain
Anda dapat mengubah dokumen dengan menambah atau mengurangi nilai dari suatu field dengan menggunakan modifier $inc
.
Contoh: db.customer.update({first_name: “Hashirama”}, {$inc: {age: 5}}); // menambahkan umur Hashirama sebanyak 5
Selain itu, method update juga dapat menghapus field dokumen dengan modifier $unset
.
Contoh: db.customer.update({first_name: “Madara”}, {$unset: {age: “”, gender: “”}}); // “” tidak berpengaruh terhadap operasi
Dengan modifier $rename
Anda dapat mengubah nama suatu field tambah mengubah nilainya.
Contoh: db.shinobi.update({first_name: “Minato”}, {$rename: {“nick”: “julukan”}});
Method update yang parameter query-nya tidak menemukan satupun dokumen tidak akan merubah apapun. Apabila update dimaksudkan untuk menginsert dokumen jika tidak terdapat match, Anda dapat menggunakan option upsert
.
Contoh:
db.customer.update(
{first_name: “Naruto”},
{
first_name: “Naruto”,
last_name: “Uzumaki”,
parent_name: “Minato”
},
{upsert: true}
); // jika dokumen dengan first_name = “Naruto” tidak ditemukan, objek baru akan terbentuk`
Menghapus dokumen
Format: db.collection.remove(<JSON-QUERY>);
Contoh: db.shinobi.remove({first_name: “Neji”});
Anda dapat membatasi jumlah dokumen yang ingin Anda hapus dengan option justOne
. Option ini membuat method remove hanya akan menghapus paling banyak satu buah dokumen.
Contoh: db.shinobi.remove({last_name: “Hyuga”}, {justOne: true});
Import dan Export Data
Perintah Import dan Export dijalankan di luar mongodb shell. Ketikkan exit
untuk keluar dari shell.
Import Data ke Collection
Format: mongoimport — db <database> — collection <collection> — file <filename>.json
Contoh: mongoimport — db ristex — collection shinobi — file shinobi.json
Export Data pada Collection
Format: mongoexport — db <database> — collection <collection> — out <filename>.json
Contoh: mongoexport — db ristex — collection shinobi — out shinobi.json
Penutup
Harapannya setelah membaca dan mempraktekkan tulisan ini, Anda menjadi lebih mengerti cara menggunakan MongoDB. Masih banyak fitur-fitur lain MongoDB yang tidak dibahas pada tulisan kali. Jika ingin belajar lebih silahkan merujuk ke dokumentasi.
Terima Kasih!