Belajar MongoDB

Belajar MongoDB: 2. Operasi CRUD

Operasi CRUD pada MongoDB sangat mudah, semua fungsi Create, Read, Update, dan Delete sudah tersedia di MongoDB. Oleh karena itu, kita tinggal menggunakannya.

Dengan operasi CRUD, kita dapat bekerja (membaca, menambah, memperbaharui, dan menghapus) dengan data pada database MongoDB kita.

Berikut ini daftar operasi CRUD pada database MongoDB:

  • Operasi Create digunakan untuk insert atau menambah dokumen baru ke database MongoDB.
  • Operasi Read digunakan untuk query atau membaca sebuah document di dalam database MongoDB.
  • Operasi Update digunakan untuk modifikasi dokumen yang telah tersimpan pada database MongoDB.
  • Operasi Delete digunakan untuk menghapus dokumen-dokumen yang telah tersimpan dalam database MongoDB.

Operasi CRUD MongoDB

Mari kita bahas satu per satu bagaimana kita menggunakan operasi CRUD pada database Mongo kita.

Operasi Create

Seperti yang sudah dijelaskan di atas, operasi create digunakan untuk insert atau menambah dokumen baru ke dalam collection di database Mongo.

Yang perlu kita ketahui adalah operasi create pada MongoDB ini hanya mentarget ke satu collection, bukan multiple collection. Masih ingat kan collection di MongoDB itu hampir sama dengan tabel di database SQL.

Ada dua operasi create yang dapat kita gunakan di MongoDB untuk insert dokumen pada collection:

  • db.collection.insertOne()
  • db.collection.insertMany()

Pada belajar MongoDB sebelumnya, kita sudah membuat database dan collection pada database MongoDB kita.

Pada belajar MongoDB : Operasi CRUD kali ini, kita masih menggunakan database yang sudah kita buat sebelumnya ya, yaitu MyFirstDatabase. Mari kita coba eksekusi operasi create di atas.

insertOne()

insertOne() ini berfungsi untuk menambahkan satu dokumen ke dalam collection pada database MongoDB kita. Kali ini kita akan menggunakan collection baru dengan nama RecordsDB.

Untuk insert sebuah dokumen ke dalam collection, kita cukup menuliskan nama collection kita diikuti dengan insertOne() lalu di dalamnya kita bisa menuliskan data apa saja yang akan kita tambahkan.

Berikut ini contohnya:

db.RecordsDB.insertOne({
     name: "Marsh",
     age: "6 years",
     species: "Dog",
     ownerAddress: "380 W. Fir Ave",
     chipped: true
})

Jika berhasil, maka sebuah dokumen baru tersimpan dalam collection. Lalu fungsi akan mengembalikan sebuah object dimana “acknowledged” = “true” dan “insertID” = “ObjectId.”

MyFirstDatabase> db.RecordsDB.insertOne({
...     name: "Marsh",
...     age: "6 years",
...     species: "Dog",
...     ownerAddress: "380 W. Fir Ave",
...     chipped: true
... })
{
  acknowledged: true,
  insertedId: ObjectId("64bd524be9dd3a526299ca49")
}

insertMany()

Jika kita ingin menambahkan banyak dokumen dalam sekali eksekusi, maka kita bisa menggunakan fungsi insertMany(). Misalnya kita akan insert banyak dokumen ke dalam RecordsDB kita seperti di bawah ini:

MyFirstDatabase> db.RecordsDB.insertMany([
   {
     name: "Flower",
     age: "10 years",
     species: "Dog",
     ownerAddress: "380 W. Fir Ave",
     chipped: true
   },
   {
     name: "Kitana", 
     age: "4 years", 
     species: "Cat", 
     ownerAddress: "521 E. Cortland", 
     chipped: true
   }
 ])

Jika kita lihat pada contoh di atas, kita akan menambahkan dua dokumen dengan nama Flower dan Kitana.

Jika kita berhasil maka fungsi tersebut akan mengembalikan insertedID lebih dari satu juga (sebanyak dokumen yang kita insert):

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("64bd53aae9dd3a526299ca4a"),
    '1': ObjectId("64bd53aae9dd3a526299ca4b")
  }
}

Operasi Read

Operasi Read berfungsi untuk membaca data yang sudah tersimpan di dalam database MongoDB kita. Terdapat dua metode untuk membaca dokumen pada collection kita, yaitu:

  • db.collection.find()
  • db.collection.findOne()

find()

Untuk membaca semua data di dalam collection kita. Jika kita langsung eksekusi fungsi find() tanpa argumen apapun, maka akan mengembalikan semua dokumen yang tersimpan yang ada di dalam collection kita, contoh:

MyFirstDatabase> db.RecordsDB.find()

Maka sistem akan mengembalikan data:

[
  {
    _id: ObjectId("64bd524be9dd3a526299ca49"),
    name: 'Marsh',
    age: '6 years',
    species: 'Dog',
    ownerAddress: '380 W. Fir Ave',
    chipped: true
  },
  {
    _id: ObjectId("64bd53aae9dd3a526299ca4a"),
    name: 'Flower',
    age: '10 years',
    species: 'Dog',
    ownerAddress: '380 W. Fir Ave',
    chipped: true
  },
  {
    _id: ObjectId("64bd53aae9dd3a526299ca4b"),
    name: 'Kitana',
    age: '4 years',
    species: 'Cat',
    ownerAddress: '521 E. Cortland',
    chipped: true
  }
]

Jika kita ingin menampilkan data dengan kriteria tertentu, kita bisa menggunakan filter. Misalnya kita hanya ingin menampilkan data dimana nilai dari species = dog seperti pada contoh di bawah ini:

MyFirstDatabase> db.RecordsDB.find({"species":"Dog"})

Maka sistem hanya akan mengembalikan dokumen dengan species= dog seperti ini:

[
  {
    _id: ObjectId("64bd524be9dd3a526299ca49"),
    name: 'Marsh',
    age: '6 years',
    species: 'Dog',
    ownerAddress: '380 W. Fir Ave',
    chipped: true
  },
  {
    _id: ObjectId("64bd53aae9dd3a526299ca4a"),
    name: 'Flower',
    age: '10 years',
    species: 'Dog',
    ownerAddress: '380 W. Fir Ave',
    chipped: true
  }
]

findOne()

Seperti namanya findOne() berfungsi untuk membaca satu dokumen teratas dari dalam collection kita sesuai kriteria / filter tertentu. Jika dokumen yang memiliki kriteria tertentu lebih dari satu di dalam collection kita, maka akan menampilkan dokumen urutan teratas dimana urutan dokumen ini menyesuikan dengan urutan dokumen yang tersimpan di dalam collection.

Berikut ini contoh penggunaan findOne() pada MongoDB:

MyFirstDatabase> db.RecordsDB.findOne({"species":"Dog"})

Maka fungsi akan mengembalikan:

{
  _id: ObjectId("64bd524be9dd3a526299ca49"),
  name: 'Marsh',
  age: '6 years',
  species: 'Dog',
  ownerAddress: '380 W. Fir Ave',
  chipped: true
}

Kita tahu bahwa dokumen dengan species= “Dog” ada dua dokumen di dalam collection kita, seperti yang sudah kita coba di atas saat menggunakan fungsi find({“species”:”Dog”}). Akan tetapi dengan fungsi findOne(), kita hanya akan mendapatkan kembalian satu dokumen saja.

Kita tidak harus selalu menggunakan filter untuk fungsi findOne(), jika tidak ada kriteria khusus. Jika kita tidak menggunakan filter, maka fungsi findOne() akan mengembalikan dokumen pertama / teratas yang ada di dalam collection kita.

Operasi Update

Seperti operasi create, operasi update beroperasi pada satu collection, dan merupakan atomik pada satu tingkat dokumen. Operasi update membutuhkan filter dan kriteria untuk memilih dokumen yang ingin kita perbaharui.

Kita harus berhati-hati saat memperbarui dokumen, karena pembaruan bersifat permanen dan tidak dapat dibatalkan. Ini juga berlaku untuk operasi penghapusan.

Pada MongoDB CRUD, terdapat 3 metode untuk operasi update:

  • db.collection.updateOne()
  • db.collection.updateMany()
  • db.collection.replaceOne()

updateOne()

Kita dapat melakukan pembaruan terhadap dokumen yang sudah tersimpan di dalam collection kita menggunakan fungsi updateOne(). Fungsi ini memiliki dua argumen, yaitu argumen filter dan aksi pembaharuan itu sendiri.

Jika kita tulis formula updateOne() ini seperti ini:

updateOne({filter}, {$set:{aksi pembaharuan}})

Jadi setelah kita menulis filter, maka akan diikuti dengan $set yang merupakan aksi dari pembaharuan yang akan kita lakukan.

Langsung saja, berikut contohnya:

db.RecordsDB.updateOne({name: "Marsh"}, {$set:{ownerAddress: "451 W. Coffee St. A204"}})

Masih menggunakan RecordsDB collection, kita akan mengupdate dokumen yang memiliki name= Marsh, dimana kita akan update nilai dari ownerAddress-nya menjadi 451 W. Coffee St. A204.

Jika berhasil, maka fungsi akan mengembalikan nilai berikut:

{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

updateMany()

Dari namanya, kita tahu bahwa fungsi ini digunakan untuk update banyak dokumen sekaligus. Cara menulisnya pun sama dengan updateOne(), dimana kita harus tentukan filter dan diikuti oleh aksi pembaharuan yang akan kita lakukan.

updateMany({filter}, {$set:{aksi pembaharuan}})

Contoh, kita akan update umur semua species= Dog menjadi 15 month:

db.RecordsDB.updateMany({species:"Dog"}, {$set: {age: "15 months"}})

Jika berhasil maka, fungsi akan memberikan nilai balikan seperti di bawah ini:

{
  acknowledged: true,
  insertedId: null,
  matchedCount: 2,
  modifiedCount: 2,
  upsertedCount: 0
}

Dari nilai balikan tersebut kita tahu bahwa ada dua dokumen yang match (species= Dog) dan dua dokumen tersebut berhasil diupdate.

replaceOne()

Dalam operasi CRUD MongoDB, kita bisa mengganti secara kesuluruhan sebuah dokumen dengan dokumen baru di dalam sebuah collection.

Jadi replaceOne() ini mengganti secara kesulurahan dokumen ya, sehingga bisa saja terjadi field yang ada pada dokumen sebelumnya hilang di dokumen terbaru.

Cara menulis replaceOne() adalah seperti ini:

replaceOne({filter}, {dokumen pengganti})

Berikut contoh replaceOne() pada operasi CRUD MongoDB:

db.RecordsDB.replaceOne({name: "Kitana"}, {name: "Maki"})

Contoh di atas adalah kita akan mengganti dokumen dengan name= Kitana, menjadi dokumen terbaru dimana dokumen terbaru hanya terdiri dari satu field saja yaitu name= Maki.

Operasi Delete

Operasi delete beroperasi pada satu koleksi, seperti operasi create dan update. Hapus operasi juga bersifat atomik untuk satu dokumen. Kita dapat melakukan operasi delete dengan filter dan kriteria untuk menentukan dokumen mana yang ingin kita hapus dari collection. Opsi filter bergantung pada sintaks yang sama yang digunakan operasi baca.

Ada dua metode operasi Delete pada CRUD MongoDB:

  • db.collection.deleteOne()
  • db.collection.deleteMany()

deleteOne()

deleteOne() berfungsi untuk menghapus satu dokumen di dalam sebuah collection. Diperlukan filter untuk memilih dokumen mana yang akan dihapus.

Contoh:

db.RecordsDB.deleteOne({name:"Maki"})

Contoh di atas dimaksudkan untuk menghapus dokumen dengan name=Maki.

Jika operasi deleteOne() berhasil, maka fungsi akan mengembalikan nilai:

{ "acknowledged" : true, "deletedCount" : 1 }

deleteMany()

Adalah metode yang digunakan untuk menghapus banyak dokumen dari sebuah collection yang diinginkan dengan satu kali operasi delete. Untuk melakukannya diperlukan kriteria filter seperti pada deleteOne().

Contoh:

db.RecordsDB.deleteMany({species:"Dog"})

Contoh di atas dimaksudkan untuk menghapus semua dokumen yang memiliki species=Dog.

Jika operasi deleteMany() berhasil, maka fungsi akan mengembalikan nilai:

{ "acknowledged" : true, "deletedCount" : 2 }

deleteCount= 2 berarti bahwa ada dua dokumen yang berhasil dihapus dari collection RecordsDB.

Kamu bisa cek apakah benar dokumen dengan species= Dog sudah terhapus semua dari database server MongoDB kita dengan fungsi find().


Itulah tutorial terkait operasi CRUD pada database MongoDB kita, semoga bermanfaat. Jika kamu mengalami kendala, silahkan mengisi di kolom komentar, saya akan membantu kamu menyelesaikannya. Terima kasih.