Saya belakangan sedang banyak menggunakan MongoDB lagi dalam pekerjaan sehari - hari. MongoDB merupakan document based NoSQL database.

Instalasi via Homebrew Pada MacOS

Cara instalasi Homebrew ini diambil dari Github MongoDB.

brew tap mongodb/brew

Instalasi MongoDB Community 3.6

brew install mongodb-community@3.6

Start Server MongoDB

Ada dua cara server MongoDB, sebagai service dimana start otomatis ketika komputer dinyalakan atau dijalankan secara manual melalui command line.

Run mongod as a service

brew services start mongodb-community
brew services stop mongodb-community

Start mongod secara manual

Pastikan direktori ~/data/db telah ada sebelum menjalankan server seperti berikut. Untuk mematikan server tekan Ctrl-c.

mongod --dbpath ~/data/db

Import dan Export

Jika SQL disebut sebagai tabel, dalam MongoDB tabel disebut sebagai collection. Berikut ini adalah cara export dan import suatu collection, serta cara dump suatu database.

Mongoexport

Command ini bertujuan untuk backup atau dump data dari Mongo Database.

# all fields
mongoexport -h example.com -u example_user -p example_password --authenticationDatabase=example_database --authenticationMechanism=example -d example_database --collection example_collection --out example_collection.json

# specific fields, format csv
mongoexport -h example.com -u example_user -p example_password --authenticationDatabase=example_database --authenticationMechanism=example -d example_database --collection example_collection --fields _id, example_field --type=csv --out example_result.csv

Mongoimport

Command ini bertujuan untuk import data dari Mongo Database hasil dari mongoexport.

mongoimport --db example_database --collection example_collection < example_collection.json

Mongodump

Mirip mongoexport, namun hasilnya bukan berupa file JSON, tapi file binary. Diklaim lebih efisien dalam membuat backup.

mongodump -h example.com -u example_user -p example_password --authenticationDatabase=example_database --authenticationMechanism=example -d example_database

Query

Berikut ini adalah query MongoDB yang sering saya gunakan.

Mencari Data Dalam Suatu List atau Array

Misal ada kolom berisi data suatu array.

{
  name: "Example Name",
  description: [
    {
      language: "id",
      detail: "contoh deskripsi"
    },
    {
      language: "en",
      detail: "example description"
    }
  ]
}

Query MongoDB mencari detail description berisi “example description”.

db.getCollection('example_collection').findOne({"description.detail": "example description"})

Hapus Satu Baris

Contoh query menghapus baris dengan menggunakan ID.

// Hapus satu baris
db.getCollection('example_collection').remove({_id: ObjectId("5bf70ac567f041b69724f910"})

// Hapus semua baris
db.getCollection('example_collection').remove({})

Hapus Suatu Data Dalam List atau Array

Misal ada data seperti berikut:

{
  name: "Example Name",
  description: [
    "hello",
    "world"
  ]
}

Query MongoDB untuk menghilangkan “hello”.

db.getCollection('example_collection').update({ _id: ObjectId("5d892ab3e9e671026a904938")}, {$pull: {description: "hello"}})

Ubah / Update Data

Query ubah data berdasarkan suatu ID dan mengubah isi dari exampleColumn.

// update satu baris
db.getCollection('example_collection').updateOne({_id: ObjectId("5d8927e1a344a7b795a19746")}, {$set: {exampleColumn: "new value"}})

// update banyak baris
db.getCollection('example_collection').updateMany({someColumn: {$eq: null}}, {$set: {exampleColumn: "new value"}})

Mencari Data yang Tidak Memiliki Kolom Tertentu / Tidak Exists

Dengan menggunakan {$exists: false} dapat dicari semua baris yang tidak memiliki kolom tersebut.

db.getCollection('example_collection').find({name: "example", exampleColumn: {$exists: false}})

Mencari Kolom yang Exists, Namun Berisi Null

Query untuk mencari semua baris yang memiliki exampleColumn berisi null.

db.getCollection('example_collection').find({name: "example", exampleColumn: {$eq: null}})

Mencari Kolom yang Tidak Exists atau Berisi Null

Query berikut untuk mencari semua baris yang memiliki exampleColumn berisi null atau semua baris yang tidak memiliki exampleColumn.

db.getCollection('example_collection').find({name: "example", exampleColumn: null})

Mencari Kolom yang Exists dan Tidak Berisi Null

Query untuk mencari semua baris yang memiliki exampleColumn tidak berisi null.

db.getCollection('example_collection').find({name: "example", exampleColumn: {$ne: null}})

Menampilkan Semua Data yang Memiliki Value yang Diinginkan Lebih Dari Satu

Query untuk mencari semua baris yang memiliki kolom name berisi hello dan world.

db.getCollection('example_collection').find({name: {$nin: ["hello", "world"]}})