MongoDB - Panduan Cepat

MongoDB adalah database lintas platform, berorientasi dokumen yang menyediakan, kinerja tinggi, ketersediaan tinggi, dan skalabilitas mudah. MongoDB mengerjakan konsep pengumpulan dan dokumen.

Database

Database adalah wadah fisik untuk koleksi. Setiap database mendapatkan kumpulan filenya sendiri di sistem file. Sebuah server MongoDB tunggal biasanya memiliki banyak database.

Koleksi

Koleksi adalah sekelompok dokumen MongoDB. Ini setara dengan tabel RDBMS. Koleksi ada dalam satu database. Koleksi tidak menerapkan skema. Dokumen dalam suatu koleksi dapat memiliki bidang yang berbeda. Biasanya, semua dokumen dalam koleksi memiliki tujuan yang serupa atau terkait.

Dokumen

Dokumen adalah sekumpulan pasangan nilai kunci. Dokumen memiliki skema dinamis. Skema dinamis berarti bahwa dokumen dalam kumpulan yang sama tidak perlu memiliki kumpulan bidang atau struktur yang sama, dan bidang umum dalam dokumen kumpulan dapat menampung jenis data yang berbeda.

Tabel berikut menunjukkan hubungan terminologi RDBMS dengan MongoDB.

RDBMS MongoDB
Database Database
Meja Koleksi
Tupel / Baris Dokumen
kolom Bidang
Table Join Dokumen Tersemat
Kunci utama Kunci Utama (Kunci default _id disediakan oleh mongodb itu sendiri)
Server Database dan Klien
Mysqld / Oracle mongod
mysql / sqlplus mongo

Dokumen Contoh

Contoh berikut menunjukkan struktur dokumen situs blog, yang hanya berupa pasangan nilai kunci yang dipisahkan koma.

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'tutorials point',
   url: 'http://www.tutorialspoint.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100, 
   comments: [	
      {
         user:'user1',
         message: 'My first comment',
         dateCreated: new Date(2011,1,20,2,15),
         like: 0 
      },
      {
         user:'user2',
         message: 'My second comments',
         dateCreated: new Date(2011,1,25,7,45),
         like: 5
      }
   ]
}

_idadalah bilangan heksadesimal 12 byte yang menjamin keunikan setiap dokumen. Anda dapat memberikan _id saat memasukkan dokumen. Jika Anda tidak memberikan maka MongoDB menyediakan id unik untuk setiap dokumen. 12 byte pertama ini 4 byte untuk stempel waktu saat ini, 3 byte berikutnya untuk id mesin, 2 byte berikutnya untuk id proses server MongoDB dan sisa 3 byte adalah NILAI tambahan sederhana.

Setiap database relasional memiliki desain skema tipikal yang memperlihatkan jumlah tabel dan hubungan antara tabel-tabel ini. Sedangkan di MongoDB, tidak ada konsep hubungan.

Keuntungan MongoDB dibandingkan RDBMS

  • Schema less- MongoDB adalah database dokumen di mana satu koleksi menyimpan dokumen yang berbeda. Jumlah bidang, konten dan ukuran dokumen dapat berbeda dari satu dokumen ke dokumen lainnya.

  • Struktur satu objek jelas.

  • Tidak ada gabungan yang rumit.

  • Kemampuan kueri yang mendalam. MongoDB mendukung kueri dinamis pada dokumen menggunakan bahasa kueri berbasis dokumen yang hampir sekuat SQL.

  • Tuning.

  • Ease of scale-out - MongoDB mudah diskalakan.

  • Konversi / pemetaan objek aplikasi ke objek database tidak diperlukan.

  • Menggunakan memori internal untuk menyimpan set kerja (berjendela), memungkinkan akses data yang lebih cepat.

Mengapa Menggunakan MongoDB?

  • Document Oriented Storage - Data disimpan dalam bentuk dokumen gaya JSON.

  • Indeks pada atribut apa pun

  • Replikasi dan ketersediaan tinggi

  • Auto-sharding

  • Kueri kaya

  • Pembaruan cepat di tempat

  • Dukungan profesional oleh MongoDB

Di mana Menggunakan MongoDB?

  • Data besar
  • Manajemen dan Pengiriman Konten
  • Infrastruktur Seluler dan Sosial
  • Manajemen Data Pengguna
  • Pusat Data

Sekarang mari kita lihat cara menginstal MongoDB di Windows.

Instal MongoDB Di Windows

Untuk menginstal MongoDB di Windows, unduh MongoDB rilis terbaru dari https://www.mongodb.org/downloads. Pastikan Anda mendapatkan versi MongoDB yang benar tergantung pada versi Windows Anda. Untuk mendapatkan versi Windows Anda, buka command prompt dan jalankan perintah berikut.

C:\>wmic os get osarchitecture
OSArchitecture
64-bit
C:\>

Versi 32-bit dari MongoDB hanya mendukung database yang lebih kecil dari 2GB dan hanya cocok untuk tujuan pengujian dan evaluasi.

Sekarang ekstrak file yang Anda unduh ke c: \ drive atau lokasi lain. Pastikan nama folder yang diekstrak adalah mongodb-win32-i386- [versi] atau mongodb-win32-x86_64- [versi]. Di sini [versi] adalah versi unduhan MongoDB.

Selanjutnya, buka command prompt dan jalankan perintah berikut.

C:\>move mongodb-win64-* mongodb
   1 dir(s) moved.
C:\>

Jika Anda telah mengekstrak MongoDB di lokasi yang berbeda, kemudian pergi ke jalur itu dengan menggunakan perintah cd FOLDER/DIR dan sekarang jalankan proses yang diberikan di atas.

MongoDB membutuhkan folder data untuk menyimpan file-nya. Lokasi default untuk direktori data MongoDB adalah c: \ data \ db. Jadi, Anda perlu membuat folder ini menggunakan Command Prompt. Jalankan urutan perintah berikut.

C:\>md data
C:\md data\db

Jika Anda harus menginstal MongoDB di lokasi yang berbeda, Anda perlu menentukan jalur alternatif untuk \data\db dengan mengatur jalan dbpath di mongod.exe. Untuk hal yang sama, keluarkan perintah berikut.

Pada prompt perintah, navigasikan ke direktori bin yang ada di folder instalasi MongoDB. Misalkan folder instalasi saya adalahD:\set up\mongodb

C:\Users\XYZ>d:
D:\>cd "set up"
D:\set up>cd mongodb
D:\set up\mongodb>cd bin
D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"

Ini akan ditampilkan waiting for connections pesan pada keluaran konsol, yang menunjukkan bahwa proses mongod.exe berhasil berjalan.

Sekarang untuk menjalankan MongoDB, Anda perlu membuka command prompt lain dan menjalankan perintah berikut.

D:\set up\mongodb\bin>mongo.exe
MongoDB shell version: 2.4.6
connecting to: test
>db.test.save( { a: 1 } )
>db.test.find()
{ "_id" : ObjectId(5879b0f65a56a454), "a" : 1 }
>

Ini akan menunjukkan bahwa MongoDB telah diinstal dan berjalan dengan sukses. Lain kali ketika Anda menjalankan MongoDB, Anda hanya perlu mengeluarkan perintah.

D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" 
D:\set up\mongodb\bin>mongo.exe

Instal MongoDB di Ubuntu

Jalankan perintah berikut untuk mengimpor kunci GPG publik MongoDB -

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

Buat file /etc/apt/sources.list.d/mongodb.list menggunakan perintah berikut.

echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' 
   | sudo tee /etc/apt/sources.list.d/mongodb.list

Sekarang jalankan perintah berikut untuk memperbarui repositori -

sudo apt-get update

Selanjutnya instal MongoDB dengan menggunakan perintah berikut -

apt-get install mongodb-10gen = 2.2.3

Dalam instalasi di atas, 2.2.3 saat ini merilis versi MongoDB. Pastikan untuk selalu menginstal versi terbaru. Sekarang MongoDB berhasil diinstal.

Mulai MongoDB

sudo service mongodb start

Hentikan MongoDB

sudo service mongodb stop

Mulai ulang MongoDB

sudo service mongodb restart

Untuk menggunakan MongoDB jalankan perintah berikut.

mongo

Ini akan menghubungkan Anda untuk menjalankan instance MongoDB.

Bantuan MongoDB

Untuk mendapatkan daftar perintah, ketik db.help()di klien MongoDB. Ini akan memberi Anda daftar perintah seperti yang ditunjukkan pada tangkapan layar berikut.

Statistik MongoDB

Untuk mendapatkan statistik tentang server MongoDB, ketik perintahnya db.stats()di klien MongoDB. Ini akan menunjukkan nama database, jumlah koleksi dan dokumen dalam database. Output dari perintah ditampilkan pada tangkapan layar berikut.

Data di MongoDB memiliki schema.documents fleksibel dalam koleksi yang sama. Mereka tidak perlu memiliki kumpulan bidang atau struktur yang sama, dan bidang umum dalam kumpulan dokumen mungkin memiliki tipe data yang berbeda.

Beberapa pertimbangan saat mendesain Skema di MongoDB

  • Rancang skema Anda sesuai dengan kebutuhan pengguna.

  • Gabungkan objek ke dalam satu dokumen jika Anda akan menggunakannya bersama-sama. Jika tidak, pisahkan mereka (tapi pastikan tidak ada kebutuhan untuk bergabung).

  • Gandakan data (tetapi terbatas) karena ruang disk lebih murah dibandingkan dengan waktu komputasi.

  • Lakukan bergabung saat menulis, bukan saat membaca.

  • Optimalkan skema Anda untuk kasus penggunaan yang paling sering.

  • Lakukan agregasi kompleks dalam skema.

Contoh

Misalkan klien membutuhkan desain database untuk blog / situsnya dan melihat perbedaan antara desain skema RDBMS dan MongoDB. Situs web memiliki persyaratan berikut.

  • Setiap posting memiliki judul, deskripsi, dan url yang unik.
  • Setiap posting dapat memiliki satu atau lebih tag.
  • Setiap posting memiliki nama penerbit dan jumlah suka.
  • Setiap posting memiliki komentar yang diberikan oleh pengguna bersama dengan nama, pesan, data-waktu dan suka mereka.
  • Di setiap postingan, tidak boleh ada lebih dari satu komentar.

Dalam skema RDBMS, desain untuk persyaratan di atas akan memiliki minimal tiga tabel.

Sementara dalam skema MongoDB, desain akan memiliki satu pos koleksi dan struktur berikut -

{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [	
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}

Jadi saat menampilkan data, di RDBMS Anda perlu menggabungkan tiga tabel dan di MongoDB, data hanya akan ditampilkan dari satu koleksi.

Pada bab ini, kita akan melihat cara membuat database di MongoDB.

Penggunaan Command

MongoDB use DATABASE_NAMEdigunakan untuk membuat database. Perintah tersebut akan membuat database baru jika tidak ada, jika tidak maka akan mengembalikan database yang sudah ada.

Sintaksis

Sintaks dasar use DATABASE pernyataannya adalah sebagai berikut -

use DATABASE_NAME

Contoh

Jika ingin menggunakan database dengan nama <mydb>, kemudian use DATABASE pernyataannya adalah sebagai berikut -

>use mydb
switched to db mydb

Untuk memeriksa database yang Anda pilih saat ini, gunakan perintah db

>db
mydb

Jika Anda ingin memeriksa daftar database Anda, gunakan perintah show dbs.

>show dbs
local     0.78125GB
test      0.23012GB

Database yang Anda buat (mydb) tidak ada dalam daftar. Untuk menampilkan database, Anda perlu memasukkan setidaknya satu dokumen ke dalamnya.

>db.movie.insert({"name":"tutorials point"})
>show dbs
local      0.78125GB
mydb       0.23012GB
test       0.23012GB

Dalam database default MongoDB adalah test. Jika Anda tidak membuat database apa pun, koleksi akan disimpan di database pengujian.

Pada bab ini, kita akan melihat bagaimana cara menjatuhkan database menggunakan perintah MongoDB.

Metode dropDatabase ()

MongoDB db.dropDatabase() perintah digunakan untuk menjatuhkan database yang ada.

Sintaksis

Sintaks dasar dropDatabase() perintahnya adalah sebagai berikut -

db.dropDatabase()

Ini akan menghapus database yang dipilih. Jika Anda belum memilih database apapun, maka itu akan menghapus database 'test' default.

Contoh

Pertama, periksa daftar database yang tersedia dengan menggunakan perintah, show dbs.

>show dbs
local      0.78125GB
mydb       0.23012GB
test       0.23012GB
>

Jika Anda ingin menghapus database baru <mydb>, kemudian dropDatabase() perintahnya adalah sebagai berikut -

>use mydb
switched to db mydb
>db.dropDatabase()
>{ "dropped" : "mydb", "ok" : 1 }
>

Sekarang periksa daftar database.

>show dbs
local      0.78125GB
test       0.23012GB
>

Di bab ini, kita akan melihat cara membuat koleksi menggunakan MongoDB.

Metode createCollection ()

MongoDB db.createCollection(name, options) digunakan untuk membuat koleksi.

Sintaksis

Sintaks dasar createCollection() perintahnya adalah sebagai berikut -

db.createCollection(name, options)

Dalam perintah, name adalah nama koleksi yang akan dibuat. Options adalah dokumen dan digunakan untuk menentukan konfigurasi koleksi.

Parameter Tipe Deskripsi
Nama Tali Nama koleksi yang akan dibuat
Pilihan Dokumen (Opsional) Tentukan opsi tentang ukuran memori dan pengindeksan

Parameter opsi bersifat opsional, jadi Anda hanya perlu menentukan nama koleksi. Berikut adalah daftar opsi yang dapat Anda gunakan -

Bidang Tipe Deskripsi
dibatasi Boolean (Opsional) Jika benar, aktifkan koleksi yang dibatasi. Koleksi yang dibatasi adalah koleksi ukuran tetap yang secara otomatis menimpa entri terlama saat mencapai ukuran maksimumnya.If you specify true, you need to specify size parameter also.
autoIndexId Boolean (Opsional) Jika benar, otomatis buat indeks pada bidang _id. Nilai defaultnya salah.
ukuran jumlah (Opsional) Menentukan ukuran maksimum dalam byte untuk koleksi yang dibatasi. If capped is true, then you need to specify this field also.
maks jumlah (Opsional) Menentukan jumlah dokumen maksimum yang diperbolehkan dalam koleksi yang dibatasi.

Saat memasukkan dokumen, MongoDB pertama-tama memeriksa bidang ukuran dari koleksi yang dibatasi, kemudian memeriksa bidang maks.

Contoh

Sintaks dasar createCollection() metode tanpa opsi adalah sebagai berikut -

>use test
switched to db test
>db.createCollection("mycollection")
{ "ok" : 1 }
>

Anda dapat memeriksa koleksi yang dibuat dengan menggunakan perintah show collections.

>show collections
mycollection
system.indexes

Contoh berikut menunjukkan sintaks createCollection() metode dengan beberapa opsi penting -

>db.createCollection("mycol", { capped : true, autoIndexId : true, size : 
   6142800, max : 10000 } )
{ "ok" : 1 }
>

Di MongoDB, Anda tidak perlu membuat koleksi. MongoDB membuat koleksi secara otomatis, saat Anda memasukkan beberapa dokumen.

>db.tutorialspoint.insert({"name" : "tutorialspoint"})
>show collections
mycol
mycollection
system.indexes
tutorialspoint
>

Di bab ini, kita akan melihat cara menjatuhkan koleksi menggunakan MongoDB.

Metode drop ()

MongoDB db.collection.drop() digunakan untuk menjatuhkan koleksi dari database.

Sintaksis

Sintaks dasar drop() perintahnya adalah sebagai berikut -

db.COLLECTION_NAME.drop()

Contoh

Pertama, periksa koleksi yang tersedia ke dalam database Anda mydb.

>use mydb
switched to db mydb
>show collections
mycol
mycollection
system.indexes
tutorialspoint
>

Sekarang jatuhkan koleksi dengan nama mycollection.

>db.mycollection.drop()
true
>

Periksa kembali daftar koleksi ke dalam database.

>show collections
mycol
system.indexes
tutorialspoint
>

drop () metode akan mengembalikan nilai true, jika koleksi yang dipilih berhasil dijatuhkan, jika tidak maka akan mengembalikan false.

MongoDB mendukung banyak tipe data. Beberapa dari mereka adalah -

  • String- Ini adalah tipe data yang paling umum digunakan untuk menyimpan data. String di MongoDB harus valid UTF-8.

  • Integer- Tipe ini digunakan untuk menyimpan nilai numerik. Integer bisa 32 bit atau 64 bit tergantung pada server Anda.

  • Boolean - Jenis ini digunakan untuk menyimpan nilai boolean (benar / salah).

  • Double - Jenis ini digunakan untuk menyimpan nilai floating point.

  • Min/ Max keys - Jenis ini digunakan untuk membandingkan nilai terhadap elemen BSON terendah dan tertinggi.

  • Arrays - Tipe ini digunakan untuk menyimpan array atau daftar atau beberapa nilai ke dalam satu kunci.

  • Timestamp- ctimestamp. Ini dapat berguna untuk merekam ketika dokumen telah dimodifikasi atau ditambahkan.

  • Object - Jenis data ini digunakan untuk dokumen yang disematkan.

  • Null - Jenis ini digunakan untuk menyimpan nilai Null.

  • Symbol- Jenis data ini digunakan secara identik dengan string; namun, ini umumnya disediakan untuk bahasa yang menggunakan tipe simbol tertentu.

  • Date - Jenis data ini digunakan untuk menyimpan tanggal atau waktu saat ini dalam format waktu UNIX. Anda dapat menentukan waktu tanggal Anda sendiri dengan membuat objek Tanggal dan melewati hari, bulan, tahun ke dalamnya.

  • Object ID - Jenis data ini digunakan untuk menyimpan ID dokumen.

  • Binary data - Jenis data ini digunakan untuk menyimpan data biner.

  • Code - Jenis data ini digunakan untuk menyimpan kode JavaScript ke dalam dokumen.

  • Regular expression - Jenis data ini digunakan untuk menyimpan ekspresi reguler.

Pada bab ini, kita akan belajar bagaimana memasukkan dokumen ke dalam koleksi MongoDB.

Metode insert ()

Untuk memasukkan data ke dalam koleksi MongoDB, Anda perlu menggunakan MongoDB's insert() atau save() metode.

Sintaksis

Sintaks dasar insert() perintahnya adalah sebagai berikut -

>db.COLLECTION_NAME.insert(document)

Contoh

>db.mycol.insert({
   _id: ObjectId(7df78ad8902c),
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'tutorials point',
   url: 'http://www.tutorialspoint.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
})

Sini mycoladalah nama koleksi kami, seperti yang dibuat di bab sebelumnya. Jika koleksi tidak ada di database, maka MongoDB akan membuat koleksi ini dan kemudian memasukkan dokumen ke dalamnya.

Dalam dokumen yang disisipkan, jika kita tidak menentukan parameter _id, maka MongoDB menetapkan ObjectId unik untuk dokumen ini.

_id adalah 12 byte bilangan heksadesimal unik untuk setiap dokumen dalam koleksi. 12 byte dibagi sebagai berikut -

_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 
   3 bytes incrementer)

Untuk menyisipkan beberapa dokumen dalam satu kueri, Anda dapat meneruskan larik dokumen dalam perintah insert ().

Contoh

>db.post.insert([
   {
      title: 'MongoDB Overview', 
      description: 'MongoDB is no sql database',
      by: 'tutorials point',
      url: 'http://www.tutorialspoint.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 100
   },
	
   {
      title: 'NoSQL Database', 
      description: "NoSQL database doesn't have tables",
      by: 'tutorials point',
      url: 'http://www.tutorialspoint.com',
      tags: ['mongodb', 'database', 'NoSQL'],
      likes: 20, 
      comments: [	
         {
            user:'user1',
            message: 'My first comment',
            dateCreated: new Date(2013,11,10,2,35),
            like: 0 
         }
      ]
   }
])

Untuk memasukkan dokumen yang bisa Anda gunakan db.post.save(document)juga. Jika Anda tidak menentukan_id di dokumen lalu save() metode akan bekerja sama seperti insert()metode. Jika Anda menentukan _id maka itu akan menggantikan seluruh data dokumen yang berisi _id seperti yang ditentukan dalam metode save ().

Di bab ini, kita akan belajar cara melakukan kueri dokumen dari koleksi MongoDB.

Metode find ()

Untuk melakukan kueri data dari koleksi MongoDB, Anda perlu menggunakan MongoDB's find() metode.

Sintaksis

Sintaks dasar find() metode adalah sebagai berikut -

>db.COLLECTION_NAME.find()

find() metode akan menampilkan semua dokumen dengan cara yang tidak terstruktur.

Metode cantik ()

Untuk menampilkan hasil dalam bentuk format, Anda dapat menggunakan pretty() metode.

Sintaksis

>db.mycol.find().pretty()

Contoh

>db.mycol.find().pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "tutorials point",
   "url": "http://www.tutorialspoint.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

Selain metode find (), ada findOne() metode, yang mengembalikan hanya satu dokumen.

RDBMS Dimana Klausul Setara di MongoDB

Untuk membuat kueri dokumen berdasarkan beberapa kondisi, Anda bisa menggunakan operasi berikut ini.

Operasi Sintaksis Contoh Setara RDBMS
Persamaan {<key>: <value>} db.mycol.find ({"by": "tutorials point"}). pretty () dimana dengan = 'titik tutorial'
Kurang dari {<key>: {$ lt: <value>}} db.mycol.find ({"suka": {$ lt: 50}}). cantik () dimana suka <50
Kurang Dari Sama {<key>: {$ lte: <value>}} db.mycol.find ({"suka": {$ lte: 50}}). cantik () dimana suka <= 50
Lebih besar dari {<key>: {$ gt: <value>}} db.mycol.find ({"suka": {$ gt: 50}}). pretty () dimana suka> 50
Lebih Dari Sama {<key>: {$ gte: <value>}} db.mycol.find ({"suka": {$ gte: 50}}). cantik () dimana suka> = 50
Tidak Sama {<key>: {$ ne: <value>}} db.mycol.find ({"suka": {$ ne: 50}}). pretty () dimana suka! = 50

DAN di MongoDB

Sintaksis

Dalam find() metode, jika Anda meneruskan beberapa kunci dengan memisahkannya dengan ',' maka MongoDB akan memperlakukannya sebagai ANDkondisi. Berikut ini adalah sintaks dasarAND -

>db.mycol.find(
   {
      $and: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

Contoh

Contoh berikut akan menampilkan semua tutorial yang ditulis oleh 'tutorials point' dan yang berjudul 'MongoDB Overview'.

>db.mycol.find({$and:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty() {
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "tutorials point",
   "url": "http://www.tutorialspoint.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}

Untuk contoh yang diberikan di atas, ekuivalen klausa where akan ' where by = 'tutorials point' AND title = 'MongoDB Overview' '. Anda dapat memberikan sejumlah kunci, pasangan nilai di klausa find.

ATAU di MongoDB

Sintaksis

Untuk meminta dokumen berdasarkan kondisi ATAU, Anda perlu menggunakan $orkata kunci. Berikut ini adalah sintaks dasarOR -

>db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

Contoh

Contoh berikut akan menampilkan semua tutorial yang ditulis oleh 'tutorials point' atau yang berjudul 'MongoDB Overview'.

>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Overview"}]}).pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "tutorials point",
   "url": "http://www.tutorialspoint.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

Menggunakan DAN dan ATAU Bersama

Contoh

Contoh berikut akan menunjukkan dokumen yang memiliki like lebih dari 10 dan yang judulnya adalah 'MongoDB Overview' atau dengan is 'tutorials point'. SQL Setara dengan klausa'where likes>10 AND (by = 'tutorials point' OR title = 'MongoDB Overview')'

>db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"},
   {"title": "MongoDB Overview"}]}).pretty()
{
   "_id": ObjectId(7df78ad8902c),
   "title": "MongoDB Overview", 
   "description": "MongoDB is no sql database",
   "by": "tutorials point",
   "url": "http://www.tutorialspoint.com",
   "tags": ["mongodb", "database", "NoSQL"],
   "likes": "100"
}
>

MongoDB update() dan save()metode digunakan untuk memperbarui dokumen menjadi koleksi. Metode update () memperbarui nilai dalam dokumen yang ada sementara metode save () menggantikan dokumen yang ada dengan dokumen yang diteruskan dalam metode save ().

Metode MongoDB Update ()

Metode update () memperbarui nilai dalam dokumen yang ada.

Sintaksis

Sintaks dasar update() metode adalah sebagai berikut -

>db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

Contoh

Pertimbangkan koleksi mycol memiliki data berikut.

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}

Contoh berikut akan menetapkan judul baru 'Tutorial MongoDB Baru' dari dokumen yang judulnya adalah 'Ikhtisar MongoDB'.

>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
>

Secara default, MongoDB hanya akan memperbarui satu dokumen. Untuk memperbarui banyak dokumen, Anda perlu menyetel parameter 'multi' menjadi true.

>db.mycol.update({'title':'MongoDB Overview'},
   {$set:{'title':'New MongoDB Tutorial'}},{multi:true})

Metode Penyimpanan MongoDB ()

Itu save() metode menggantikan dokumen yang ada dengan dokumen baru yang diteruskan dalam metode save ().

Sintaksis

Sintaks dasar MongoDB save() metode ditunjukkan di bawah ini -

>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})

Contoh

Contoh berikut akan mengganti dokumen dengan _id '5983548781331adf45ec5'.

>db.mycol.save(
   {
      "_id" : ObjectId(5983548781331adf45ec5), "title":"Tutorials Point New Topic",
      "by":"Tutorials Point"
   }
)
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"Tutorials Point New Topic",
   "by":"Tutorials Point"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
>

Di bab ini, kita akan belajar cara menghapus dokumen menggunakan MongoDB.

Metode remove ()

MongoDB remove()metode digunakan untuk menghapus dokumen dari koleksi. remove () metode menerima dua parameter. Pertama adalah kriteria penghapusan dan yang kedua adalah flag justOne.

  • deletion criteria - Kriteria penghapusan (opsional) menurut dokumen akan dihapus.

  • justOne - (Opsional) jika disetel ke true atau 1, maka hapus hanya satu dokumen.

Sintaksis

Sintaks dasar remove() metode adalah sebagai berikut -

>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

Contoh

Pertimbangkan koleksi mycol memiliki data berikut.

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}

Contoh berikut akan menghapus semua dokumen yang berjudul 'Ikhtisar MongoDB'.

>db.mycol.remove({'title':'MongoDB Overview'})
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
>

Hapus Hanya Satu

Jika ada beberapa catatan dan Anda hanya ingin menghapus catatan pertama, atur justOne parameter dalam remove() metode.

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

Hapus Semua Dokumen

Jika Anda tidak menentukan kriteria penghapusan, maka MongoDB akan menghapus seluruh dokumen dari koleksi. This is equivalent of SQL's truncate command.

>db.mycol.remove({})
>db.mycol.find()
>

Di MongoDB, proyeksi berarti memilih hanya data yang diperlukan daripada memilih keseluruhan data dari sebuah dokumen. Jika dokumen memiliki 5 bidang dan Anda hanya perlu menampilkan 3, pilih hanya 3 bidang saja.

Metode find ()

MongoDB find()metode, dijelaskan dalam Dokumen Kueri MongoDB menerima parameter opsional kedua yaitu daftar bidang yang ingin Anda ambil. Di MongoDB, saat Anda menjalankanfind()metode, kemudian menampilkan semua bidang dokumen. Untuk membatasi ini, Anda perlu mengatur daftar bidang dengan nilai 1 atau 0. 1 digunakan untuk menampilkan bidang sedangkan 0 digunakan untuk menyembunyikan bidang.

Sintaksis

Sintaks dasar find() metode dengan proyeksi adalah sebagai berikut -

>db.COLLECTION_NAME.find({},{KEY:1})

Contoh

Pertimbangkan koleksi mycol memiliki data berikut -

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}

Contoh berikut akan menampilkan judul dokumen saat melakukan kueri dokumen.

>db.mycol.find({},{"title":1,_id:0})
{"title":"MongoDB Overview"}
{"title":"NoSQL Overview"}
{"title":"Tutorials Point Overview"}
>

Tolong dicatat _id bidang selalu ditampilkan saat menjalankan find() metode, jika Anda tidak menginginkan bidang ini, maka Anda perlu mengaturnya sebagai 0.

Di bab ini, kita akan mempelajari cara membatasi record menggunakan MongoDB.

Metode Limit ()

Untuk membatasi catatan di MongoDB, Anda perlu menggunakan limit()metode. Metode ini menerima satu argumen tipe nomor, yang merupakan jumlah dokumen yang ingin Anda tampilkan.

Sintaksis

Sintaks dasar limit() metode adalah sebagai berikut -

>db.COLLECTION_NAME.find().limit(NUMBER)

Contoh

Pertimbangkan koleksi myycol memiliki data berikut.

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}

Contoh berikut hanya akan menampilkan dua dokumen saat melakukan kueri dokumen.

>db.mycol.find({},{"title":1,_id:0}).limit(2)
{"title":"MongoDB Overview"}
{"title":"NoSQL Overview"}
>

Jika Anda tidak menentukan argumen angka dalam limit() metode maka itu akan menampilkan semua dokumen dari koleksi.

Metode MongoDB Skip ()

Selain metode limit (), ada satu metode lagi skip() yang juga menerima argumen tipe nomor dan digunakan untuk melewati jumlah dokumen.

Sintaksis

Sintaks dasar skip() metode adalah sebagai berikut -

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

Contoh

Contoh berikut hanya akan menampilkan dokumen kedua.

>db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1)
{"title":"NoSQL Overview"}
>

Harap dicatat, nilai default di skip() metode adalah 0.

Di bab ini, kita akan mempelajari cara mengurutkan record di MongoDB.

Metode sort ()

Untuk mengurutkan dokumen di MongoDB, Anda perlu menggunakan sort()metode. Metode ini menerima dokumen yang berisi daftar bidang bersama dengan urutan pengurutannya. Untuk menentukan urutan penyortiran 1 dan -1 digunakan. 1 digunakan untuk urutan naik sedangkan -1 digunakan untuk urutan turun.

Sintaksis

Sintaks dasar sort() metode adalah sebagai berikut -

>db.COLLECTION_NAME.find().sort({KEY:1})

Contoh

Pertimbangkan koleksi myycol memiliki data berikut.

{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}

Contoh berikut akan menampilkan dokumen yang diurutkan berdasarkan judul dalam urutan menurun.

>db.mycol.find({},{"title":1,_id:0}).sort({"title":-1})
{"title":"Tutorials Point Overview"}
{"title":"NoSQL Overview"}
{"title":"MongoDB Overview"}
>

Harap dicatat, jika Anda tidak menentukan preferensi pengurutan, maka sort() metode akan menampilkan dokumen dalam urutan menaik.

Indeks mendukung resolusi kueri yang efisien. Tanpa indeks, MongoDB harus memindai setiap dokumen dari sebuah koleksi untuk memilih dokumen yang cocok dengan pernyataan kueri. Pemindaian ini sangat tidak efisien dan membutuhkan MongoDB untuk memproses data dalam jumlah besar.

Indeks adalah struktur data khusus, yang menyimpan sebagian kecil dari kumpulan data dalam bentuk yang mudah dilintasi. Indeks menyimpan nilai bidang tertentu atau sekumpulan bidang, diurutkan berdasarkan nilai bidang seperti yang ditentukan dalam indeks.

Metode sureIndex ()

Untuk membuat indeks, Anda perlu menggunakan metode sureIndex () dari MongoDB.

Sintaksis

Sintaks dasar ensureIndex() metode adalah sebagai berikut ().

>db.COLLECTION_NAME.ensureIndex({KEY:1})

Di sini key adalah nama field di mana Anda ingin membuat indeks dan 1 untuk urutan menaik. Untuk membuat indeks dalam urutan menurun Anda perlu menggunakan -1.

Contoh

>db.mycol.ensureIndex({"title":1})
>

Di ensureIndex() metode Anda dapat melewati beberapa bidang, untuk membuat indeks pada beberapa bidang.

>db.mycol.ensureIndex({"title":1,"description":-1})
>

ensureIndex()metode juga menerima daftar opsi (yang opsional). Berikut daftarnya -

Parameter Tipe Deskripsi
Latar Belakang Boolean Membangun indeks di latar belakang sehingga membuat indeks tidak memblokir aktivitas database lainnya. Tentukan true untuk membangun di latar belakang. Nilai defaultnya adalahfalse.
unik Boolean Membuat indeks unik sehingga koleksi tidak akan menerima penyisipan dokumen di mana kunci indeks atau kunci cocok dengan nilai yang ada di indeks. Tentukan benar untuk membuat indeks unik. Nilai defaultnya adalahfalse.
nama tali Nama indeks. Jika tidak ditentukan, MongoDB menghasilkan nama indeks dengan menggabungkan nama bidang yang diindeks dan urutan sortir.
dropDups Boolean Membuat indeks unik pada bidang yang mungkin memiliki duplikat. MongoDB hanya mengindeks kemunculan pertama dari sebuah kunci dan menghapus semua dokumen dari koleksi yang berisi kejadian selanjutnya dari kunci itu. Tentukan benar untuk membuat indeks unik. Nilai defaultnya adalahfalse.
jarang Boolean Jika benar, indeks hanya mereferensikan dokumen dengan bidang yang ditentukan. Indeks ini menggunakan lebih sedikit ruang tetapi berperilaku berbeda dalam beberapa situasi (terutama jenis). Nilai defaultnya adalahfalse.
expireAfterSeconds bilangan bulat Menentukan nilai, dalam detik, sebagai TTL untuk mengontrol berapa lama MongoDB menyimpan dokumen dalam koleksi ini.
v versi indeks Nomor versi indeks. Versi indeks default bergantung pada versi MongoDB yang berjalan saat membuat indeks.
bobot dokumen Bobotnya adalah angka mulai dari 1 hingga 99.999 dan menunjukkan signifikansi bidang relatif terhadap bidang terindeks lainnya dalam hal skor.
default_language tali Untuk indeks teks, bahasa yang menentukan daftar kata berhenti dan aturan untuk stemmer dan tokenizer. Nilai defaultnya adalahenglish.
language_override tali Untuk indeks teks, tentukan nama bidang di dokumen yang berisi, bahasa yang akan menggantikan bahasa default. Nilai defaultnya adalah bahasa.

Operasi agregasi memproses catatan data dan mengembalikan hasil yang dihitung. Operasi agregasi mengelompokkan nilai dari beberapa dokumen secara bersamaan, dan dapat melakukan berbagai operasi pada data yang dikelompokkan untuk mengembalikan satu hasil. Dalam SQL count (*) dan dengan group by adalah ekuivalen dengan agregasi mongodb.

Metode aggregate ()

Untuk agregasi di MongoDB, Anda harus menggunakan aggregate() metode.

Sintaksis

Sintaks dasar aggregate() metode adalah sebagai berikut -

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Contoh

Dalam koleksi Anda memiliki data berikut -

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'tutorials point',
   url: 'http://www.tutorialspoint.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'tutorials point',
   url: 'http://www.tutorialspoint.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

Nah dari koleksi di atas, jika Anda ingin menampilkan daftar yang menyatakan berapa banyak tutorial yang ditulis oleh setiap pengguna, maka Anda akan menggunakan yang berikut ini aggregate() metode -

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
   "result" : [
      {
         "_id" : "tutorials point",
         "num_tutorial" : 2
      },
      {
         "_id" : "Neo4j",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}
>

Kueri setara Sql untuk kasus penggunaan di atas akan menjadi select by_user, count(*) from mycol group by by_user.

Dalam contoh di atas, kami telah mengelompokkan dokumen berdasarkan bidang by_userdan pada setiap kemunculan nilai by_user sebelumnya jumlah bertambah. Berikut adalah daftar ekspresi agregasi yang tersedia.

Ekspresi Deskripsi Contoh
$ jumlah Meringkas nilai yang ditentukan dari semua dokumen dalam koleksi. db.mycol.aggregate ([{$ group: {_id: "$by_user", num_tutorial : {$jumlah: "$ suka"}}}])
$ avg Menghitung rata-rata semua nilai yang diberikan dari semua dokumen dalam koleksi. db.mycol.aggregate ([{$group : {_id : "$by_user ", num_tutorial: {$avg : "$suka "}}}])
$ min Mendapat nilai minimum yang sesuai dari semua dokumen dalam koleksi. db.mycol.aggregate ([{$ group: {_id: "$by_user", num_tutorial : {$min: "$ suka"}}}])
$ maks Mendapat nilai maksimum yang sesuai dari semua dokumen dalam koleksi. db.mycol.aggregate ([{$group : {_id : "$by_user ", num_tutorial: {$max : "$suka "}}}])
$ push Menyisipkan nilai ke array di dokumen yang dihasilkan. db.mycol.aggregate ([{$ group: {_id: "$by_user", url : {$dorong: "$ url"}}}])
$ addToSet Menyisipkan nilai ke larik di dokumen yang dihasilkan tetapi tidak membuat duplikat. db.mycol.aggregate ([{$group : {_id : "$by_user ", url: {$addToSet : "$url "}}}])
$ pertama Mendapat dokumen pertama dari dokumen sumber sesuai dengan pengelompokannya. Biasanya ini hanya masuk akal bersama dengan beberapa tahap "$ sort" yang diterapkan sebelumnya. db.mycol.aggregate ([{$group : {_id : "$by_user ", first_url: {$first : "$url "}}}])
$ terakhir Mendapat dokumen terakhir dari dokumen sumber sesuai dengan pengelompokannya. Biasanya ini hanya masuk akal bersama dengan beberapa tahap "$ sort" yang diterapkan sebelumnya. db.mycol.aggregate ([{$group : {_id : "$by_user ", last_url: {$last : "$url "}}}])

Konsep Pipa

Dalam perintah UNIX, shell pipeline berarti kemungkinan untuk menjalankan operasi pada beberapa masukan dan menggunakan keluaran tersebut sebagai masukan untuk perintah berikutnya dan seterusnya. MongoDB juga mendukung konsep yang sama dalam kerangka agregasi. Ada satu set tahapan yang mungkin dan masing-masing tahapan tersebut diambil sebagai sekumpulan dokumen sebagai input dan menghasilkan sekumpulan dokumen yang dihasilkan (atau dokumen JSON yang dihasilkan akhir di ujung pipeline). Ini kemudian dapat digunakan untuk tahap berikutnya dan seterusnya.

Berikut adalah tahapan yang mungkin dalam kerangka agregasi -

  • $project - Digunakan untuk memilih beberapa bidang tertentu dari koleksi.

  • $match - Ini adalah operasi pemfilteran dan karenanya dapat mengurangi jumlah dokumen yang diberikan sebagai masukan ke tahap berikutnya.

  • $group - Ini melakukan agregasi yang sebenarnya seperti yang dibahas di atas.

  • $sort - Menyortir dokumen.

  • $skip - Dengan ini, dimungkinkan untuk melompat ke depan dalam daftar dokumen untuk sejumlah dokumen tertentu.

  • $limit - Ini membatasi jumlah dokumen untuk dilihat, dengan jumlah yang diberikan mulai dari posisi saat ini.

  • $unwind- Ini digunakan untuk melepas dokumen yang menggunakan array. Saat menggunakan larik, datanya adalah jenis pra-bergabung dan operasi ini akan dibatalkan dengan ini untuk memiliki dokumen individual lagi. Maka dengan tahap ini kami akan menambah jumlah dokumen untuk tahap selanjutnya.

Replikasi adalah proses sinkronisasi data di beberapa server. Replikasi menyediakan redundansi dan meningkatkan ketersediaan data dengan banyak salinan data di server database yang berbeda. Replikasi melindungi database dari hilangnya satu server. Replikasi juga memungkinkan Anda memulihkan dari kegagalan perangkat keras dan gangguan layanan. Dengan salinan data tambahan, Anda dapat mendedikasikan satu untuk pemulihan bencana, pelaporan, atau pencadangan.

Mengapa Replikasi?

  • Untuk menjaga keamanan data Anda
  • Ketersediaan data yang tinggi (24 * 7)
  • Pemulihan bencana
  • Tidak ada waktu henti untuk pemeliharaan (seperti pencadangan, pembuatan kembali indeks, pemadatan)
  • Skala baca (salinan tambahan untuk dibaca)
  • Set replika transparan untuk aplikasi

Bagaimana Replikasi Bekerja di MongoDB

MongoDB mencapai replikasi dengan menggunakan set replika. Satu set replika adalah sekelompokmongodcontoh yang menghosting kumpulan data yang sama. Dalam replika, satu node adalah node utama yang menerima semua operasi tulis. Semua contoh lainnya, seperti sekunder, menerapkan operasi dari primer sehingga mereka memiliki kumpulan data yang sama. Kumpulan replika hanya dapat memiliki satu node utama.

  • Set replika adalah sekelompok dua atau lebih node (umumnya diperlukan minimal 3 node).

  • Dalam satu set replika, satu node adalah node primer dan node yang tersisa adalah node sekunder.

  • Semua data direplikasi dari node primer ke sekunder.

  • Pada saat failover atau pemeliharaan otomatis, pemilihan ditetapkan untuk primer dan simpul utama baru dipilih.

  • Setelah pemulihan node gagal, itu lagi bergabung dengan set replika dan berfungsi sebagai node sekunder.

Diagram khas replikasi MongoDB ditampilkan di mana aplikasi klien selalu berinteraksi dengan node primer dan node primer kemudian mereplikasi data ke node sekunder.

Fitur Set Replika

  • Sekelompok N node
  • Salah satu node bisa menjadi primer
  • Semua operasi tulis masuk ke primer
  • Pengalihan otomatis
  • Pemulihan otomatis
  • Pemilihan konsensus primer

Siapkan Kumpulan Replika

Dalam tutorial ini, kami akan mengonversi instance MongoDB mandiri menjadi satu set replika. Untuk mengkonversi ke replika set, berikut adalah langkah-langkahnya -

  • Shutdown sudah menjalankan server MongoDB.

  • Mulai server MongoDB dengan menentukan opsi - replSet. Berikut ini adalah sintaks dasar --replSet -

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

Contoh

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
  • Ini akan memulai instance mongod dengan nama rs0, pada port 27017.

  • Sekarang mulai command prompt dan hubungkan ke instance mongod ini.

  • Di klien Mongo, berikan perintah rs.initiate() untuk memulai kumpulan replika baru.

  • Untuk memeriksa konfigurasi set replika, jalankan perintah rs.conf(). Untuk memeriksa status set replika, berikan perintahrs.status().

Tambahkan Anggota ke Kumpulan Replika

Untuk menambahkan anggota ke kumpulan replika, mulai instance mongod di beberapa mesin. Sekarang mulai klien mongo dan berikan perintahrs.add().

Sintaksis

Sintaks dasar rs.add() perintahnya adalah sebagai berikut -

>rs.add(HOST_NAME:PORT)

Contoh

Misalkan nama instance mongod Anda adalah mongod1.net dan itu berjalan di port 27017. Untuk menambahkan contoh ini ke set replika, berikan perintahrs.add() di klien Mongo.

>rs.add("mongod1.net:27017")
>

Anda dapat menambahkan instance mongod ke set replika hanya ketika Anda terhubung ke node utama. Untuk memeriksa apakah Anda terhubung ke primer atau tidak, keluarkan perintahdb.isMaster() di klien mongo.

Sharding adalah proses menyimpan catatan data di beberapa mesin dan merupakan pendekatan MongoDB untuk memenuhi permintaan pertumbuhan data. Saat ukuran data meningkat, satu mesin mungkin tidak cukup untuk menyimpan data atau menyediakan throughput baca dan tulis yang dapat diterima. Sharding menyelesaikan masalah dengan penskalaan horizontal. Dengan sharding, Anda menambahkan lebih banyak mesin untuk mendukung pertumbuhan data dan tuntutan operasi baca dan tulis.

Mengapa Sharding?

  • Dalam replikasi, semua penulisan masuk ke node master
  • Kueri sensitif latensi masih masuk ke master
  • Set replika tunggal memiliki batasan 12 node
  • Memori tidak bisa cukup besar jika set data aktif berukuran besar
  • Disk lokal tidak cukup besar
  • Penskalaan vertikal terlalu mahal

Sharding di MongoDB

Diagram berikut menunjukkan sharding di MongoDB menggunakan sharded cluster.

Dalam diagram berikut, ada tiga komponen utama -

  • Shards- Pecahan digunakan untuk menyimpan data. Mereka menyediakan ketersediaan tinggi dan konsistensi data. Dalam lingkungan produksi, setiap pecahan adalah kumpulan replika terpisah.

  • Config Servers- Server config menyimpan metadata cluster. Data ini berisi pemetaan kumpulan data cluster ke pecahan. Router kueri menggunakan metadata ini untuk menargetkan operasi ke pecahan tertentu. Dalam lingkungan produksi, cluster yang dipecah memiliki tepat 3 server konfigurasi.

  • Query Routers- Query router pada dasarnya adalah contoh mongo, antarmuka dengan aplikasi klien dan operasi langsung ke shard yang sesuai. Router kueri memproses dan menargetkan operasi ke pecahan dan kemudian mengembalikan hasilnya ke klien. Cluster dengan shard dapat berisi lebih dari satu router kueri untuk membagi beban permintaan klien. Seorang klien mengirimkan permintaan ke satu router kueri. Umumnya, cluster yang dipecah memiliki banyak router kueri.

Di bab ini, kita akan melihat cara membuat cadangan di MongoDB.

Buang Data MongoDB

Untuk membuat backup database di MongoDB, Anda harus menggunakan mongodumpperintah. Perintah ini akan membuang seluruh data server Anda ke direktori dump. Ada banyak opsi yang tersedia untuk membatasi jumlah data atau membuat cadangan server jarak jauh Anda.

Sintaksis

Sintaks dasar mongodump perintahnya adalah sebagai berikut -

>mongodump

Contoh

Mulai server mongod Anda. Dengan asumsi bahwa server mongod Anda berjalan di localhost dan port 27017, buka prompt perintah dan buka direktori bin dari instance mongodb Anda dan ketik perintahnyamongodump

Pertimbangkan koleksi mycol memiliki data berikut.

>mongodump

Perintah akan terhubung ke server yang dijalankan di 127.0.0.1 dan pelabuhan 27017 dan mengembalikan semua data server ke direktori /bin/dump/. Berikut adalah output dari perintah -

Berikut adalah daftar opsi yang tersedia yang dapat digunakan dengan file mongodump perintah.

Sintaksis Deskripsi Contoh
mongodump - tuan rumah HOST_NAME --port PORT_NUMBER Perintah ini akan mencadangkan semua database dari instance mongod yang ditentukan. mongodump --host tutorialspoint.com --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY Perintah ini hanya akan mencadangkan database yang ditentukan di jalur yang ditentukan. mongodump --dbpath / data / db / --out / data / backup /
mongodump --koleksi COLLECTION --db DB_NAME Perintah ini hanya akan mencadangkan koleksi tertentu dari database tertentu. mongodump --collection mycol --db test

Mengembalikan data

Untuk mengembalikan data backup MongoDB's mongorestoreperintah digunakan. Perintah ini memulihkan semua data dari direktori cadangan.

Sintaksis

Sintaks dasar mongorestore perintah adalah -

>mongorestore

Berikut adalah output dari perintah -

Saat Anda mempersiapkan penerapan MongoDB, Anda harus mencoba memahami bagaimana aplikasi Anda akan bertahan dalam produksi. Sebaiknya kembangkan pendekatan yang konsisten dan dapat diulang untuk mengelola lingkungan penerapan Anda sehingga Anda dapat meminimalkan kejutan apa pun setelah Anda dalam produksi.

Pendekatan terbaik menggabungkan pembuatan prototipe penyiapan Anda, melakukan pengujian beban, memantau metrik utama, dan menggunakan informasi tersebut untuk menskalakan penyiapan Anda. Bagian kunci dari pendekatan ini adalah untuk secara proaktif memantau seluruh sistem Anda - ini akan membantu Anda memahami bagaimana sistem produksi Anda akan bertahan sebelum diterapkan, dan menentukan di mana Anda perlu menambah kapasitas. Memiliki wawasan tentang potensi lonjakan dalam penggunaan memori Anda, misalnya, dapat membantu memadamkan api kunci tulis sebelum dimulai.

Untuk memantau penerapan Anda, MongoDB menyediakan beberapa perintah berikut -

mongostat

Perintah ini memeriksa status semua instance mongod yang sedang berjalan dan mengembalikan penghitung operasi database. Penghitung ini termasuk sisipan, kueri, pembaruan, penghapusan, dan kursor. Perintah juga menunjukkan saat Anda mengenai kesalahan halaman, dan menampilkan persentase kunci Anda. Ini berarti Anda kehabisan memori, mencapai kapasitas tulis atau memiliki beberapa masalah kinerja.

Untuk menjalankan perintah, mulai instance mongod Anda. Di prompt perintah lain, bukabin direktori instalasi dan jenis mongodb Anda mongostat.

D:\set up\mongodb\bin>mongostat

Berikut adalah output dari perintah -

Mongotop

Perintah ini melacak dan melaporkan aktivitas baca dan tulis instance MongoDB pada basis pengumpulan. Secara default,mongotopmengembalikan informasi di setiap detik, yang dapat Anda ubah sesuai kebutuhan. Anda harus memeriksa apakah aktivitas baca dan tulis ini cocok dengan maksud aplikasi Anda, dan Anda tidak menjalankan terlalu banyak penulisan ke database dalam satu waktu, membaca terlalu sering dari disk, atau melebihi ukuran set kerja Anda.

Untuk menjalankan perintah, mulai instance mongod Anda. Di prompt perintah lain, bukabin direktori instalasi dan jenis mongodb Anda mongotop.

D:\set up\mongodb\bin>mongotop

Berikut adalah output dari perintah -

Untuk mengganti mongotop perintah untuk mengembalikan informasi lebih jarang, tentukan nomor tertentu setelah perintah mongotop.

D:\set up\mongodb\bin>mongotop 30

Contoh di atas akan mengembalikan nilai setiap 30 detik.

Terlepas dari alat MongoDB, 10gen menyediakan layanan pemantauan yang dihosting gratis, MongoDB Management Service (MMS), yang menyediakan dasbor dan memberi Anda tampilan metrik dari seluruh cluster Anda.

Pada bab ini, kita akan mempelajari cara mengatur driver JDBC MongoDB.

Instalasi

Sebelum Anda mulai menggunakan MongoDB di program Java Anda, Anda perlu memastikan bahwa Anda memiliki driver MongoDB JDBC dan Java yang telah diatur di mesin. Anda dapat memeriksa tutorial Java untuk instalasi Java di komputer Anda. Sekarang, mari kita periksa cara mengatur driver JDBC MongoDB.

  • Anda perlu mengunduh jar dari jalur Unduh mongo.jar . Pastikan untuk mengunduh rilis terbarunya.

  • Anda perlu memasukkan mongo.jar ke jalur kelas Anda.

Hubungkan ke Database

Untuk menghubungkan database, Anda perlu menentukan nama database, jika database tidak ada maka MongoDB membuatnya secara otomatis.

Berikut adalah potongan kode untuk menghubungkan ke database -

import com.mongodb.client.MongoDatabase; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class ConnectToDB { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 
   
      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb"); 
      System.out.println("Credentials ::"+ credential);     
   } 
}

Sekarang, mari kita kompilasi dan jalankan program di atas untuk membuat database myDb seperti yang ditunjukkan di bawah ini.

$javac ConnectToDB.java 
$java ConnectToDB

Saat menjalankan, program di atas memberi Anda output berikut.

Connected to the database successfully 
Credentials ::MongoCredential{
   mechanism = null, 
   userName = 'sampleUser', 
   source = 'myDb', 
   password = <hidden>, 
   mechanismProperties = {}
}

Buat Koleksi

Untuk membuat koleksi, createCollection() metode dari com.mongodb.client.MongoDatabase kelas digunakan.

Berikut adalah potongan kode untuk membuat koleksi -

import com.mongodb.client.MongoDatabase; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class CreatingCollection { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 
     
      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      //Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb");  
      
      //Creating a collection 
      database.createCollection("sampleCollection"); 
      System.out.println("Collection created successfully"); 
   } 
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Connected to the database successfully 
Collection created successfully

Mendapatkan / Memilih Koleksi

Untuk mendapatkan / memilih koleksi dari database, getCollection() metode dari com.mongodb.client.MongoDatabase kelas digunakan.

Berikut adalah program untuk mendapatkan / memilih koleksi -

import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 

import org.bson.Document; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class selectingCollection { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 
     
      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb");  
      
      // Creating a collection 
      System.out.println("Collection created successfully"); 

      // Retieving a collection
      MongoCollection<Document> collection = database.getCollection("myCollection"); 
      System.out.println("Collection myCollection selected successfully"); 
   }
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Connected to the database successfully 
Collection created successfully 
Collection myCollection selected successfully

Sisipkan Dokumen

Untuk memasukkan dokumen ke MongoDB, insert() metode dari com.mongodb.client.MongoCollection kelas digunakan.

Berikut adalah potongan kode untuk menyisipkan dokumen -

import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 

import org.bson.Document;  
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class InsertingDocument { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 

      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb"); 

      // Retrieving a collection
      MongoCollection<Document> collection = database.getCollection("sampleCollection"); 
      System.out.println("Collection sampleCollection selected successfully");

      Document document = new Document("title", "MongoDB") 
      .append("id", 1)
      .append("description", "database") 
      .append("likes", 100) 
      .append("url", "http://www.tutorialspoint.com/mongodb/") 
      .append("by", "tutorials point");  
      collection.insertOne(document); 
      System.out.println("Document inserted successfully");     
   } 
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Connected to the database successfully 
Collection sampleCollection selected successfully 
Document inserted successfully

Ambil Semua Dokumen

Untuk memilih semua dokumen dari koleksi, find() metode dari com.mongodb.client.MongoCollectionkelas digunakan. Metode ini mengembalikan kursor, jadi Anda perlu mengulang kursor ini.

Berikut adalah program untuk memilih semua dokumen -

import com.mongodb.client.FindIterable; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase;  

import java.util.Iterator; 
import org.bson.Document; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class RetrievingAllDocuments { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 

      // Creating Credentials 
      MongoCredential credential;
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb");  
      
      // Retrieving a collection 
      MongoCollection<Document> collection = database.getCollection("sampleCollection");
      System.out.println("Collection sampleCollection selected successfully"); 

      // Getting the iterable object 
      FindIterable<Document> iterDoc = collection.find(); 
      int i = 1; 

      // Getting the iterator 
      Iterator it = iterDoc.iterator(); 
    
      while (it.hasNext()) {  
         System.out.println(it.next());  
      i++; 
      }
   } 
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Document{{
   _id = 5967745223993a32646baab8, 
   title = MongoDB, 
   id = 1, 
   description = database, 
   likes = 100, 
   url = http://www.tutorialspoint.com/mongodb/, by = tutorials point
}}  
Document{{
   _id = 7452239959673a32646baab8, 
   title = RethinkDB, 
   id = 2, 
   description = database, 
   likes = 200, 
   url = http://www.tutorialspoint.com/rethinkdb/, by = tutorials point
}}

Perbarui Dokumen

Untuk memperbarui dokumen dari koleksi, updateOne() metode dari com.mongodb.client.MongoCollection kelas digunakan.

Berikut adalah program untuk memilih dokumen pertama -

import com.mongodb.client.FindIterable; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 
import com.mongodb.client.model.Filters; 
import com.mongodb.client.model.Updates; 

import java.util.Iterator; 
import org.bson.Document;  
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class UpdatingDocuments { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 
     
      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb"); 

      // Retrieving a collection 
      MongoCollection<Document> collection = database.getCollection("sampleCollection");
      System.out.println("Collection myCollection selected successfully"); 

      collection.updateOne(Filters.eq("id", 1), Updates.set("likes", 150));       
      System.out.println("Document update successfully...");  
      
      // Retrieving the documents after updation 
      // Getting the iterable object
      FindIterable<Document> iterDoc = collection.find(); 
      int i = 1; 

      // Getting the iterator 
      Iterator it = iterDoc.iterator(); 

      while (it.hasNext()) {  
         System.out.println(it.next());  
         i++; 
      }     
   }  
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Document update successfully... 
Document {{
   _id = 5967745223993a32646baab8, 
   title = MongoDB, 
   id = 1, 
   description = database, 
   likes = 150, 
   url = http://www.tutorialspoint.com/mongodb/, by = tutorials point
}}

Hapus Dokumen

Untuk menghapus dokumen dari koleksi, Anda perlu menggunakan deleteOne() metode dari com.mongodb.client.MongoCollection kelas.

Berikut adalah program untuk menghapus dokumen -

import com.mongodb.client.FindIterable; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase; 
import com.mongodb.client.model.Filters;  

import java.util.Iterator; 
import org.bson.Document; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class DeletingDocuments { 
   
   public static void main( String args[] ) {  
   
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 );
      
      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb"); 

      // Retrieving a collection
      MongoCollection<Document> collection = database.getCollection("sampleCollection");
      System.out.println("Collection sampleCollection selected successfully"); 

      // Deleting the documents 
      collection.deleteOne(Filters.eq("id", 1)); 
      System.out.println("Document deleted successfully...");  
      
      // Retrieving the documents after updation 
      // Getting the iterable object 
      FindIterable<Document> iterDoc = collection.find(); 
      int i = 1; 

      // Getting the iterator 
      Iterator it = iterDoc.iterator(); 

      while (it.hasNext()) {  
         System.out.println("Inserted Document: "+i);  
         System.out.println(it.next());  
         i++; 
      }       
   } 
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Connected to the database successfully 
Collection sampleCollection selected successfully 
Document deleted successfully...

Menjatuhkan Koleksi

Untuk melepaskan koleksi dari database, Anda perlu menggunakan drop() metode dari com.mongodb.client.MongoCollection kelas.

Berikut adalah program untuk menghapus koleksi -

import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoDatabase;  

import org.bson.Document;  
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class DropingCollection { 
   
   public static void main( String args[] ) {  

      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 

      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 
      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb");  
      
      // Creating a collection 
      System.out.println("Collections created successfully"); 

      // Retieving a collection
      MongoCollection<Document> collection = database.getCollection("sampleCollection");

      // Dropping a Collection 
      collection.drop(); 
      System.out.println("Collection dropped successfully");
   } 
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Connected to the database successfully 
Collection sampleCollection selected successfully 
Collection dropped successfully

Mencantumkan Semua Koleksi

Untuk mencantumkan semua koleksi dalam database, Anda perlu menggunakan file listCollectionNames() metode dari com.mongodb.client.MongoDatabase kelas.

Berikut adalah program untuk membuat daftar semua koleksi database -

import com.mongodb.client.MongoDatabase; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential;  

public class ListOfCollection { 
   
   public static void main( String args[] ) {  
      
      // Creating a Mongo client 
      MongoClient mongo = new MongoClient( "localhost" , 27017 ); 

      // Creating Credentials 
      MongoCredential credential; 
      credential = MongoCredential.createCredential("sampleUser", "myDb", 
         "password".toCharArray()); 

      System.out.println("Connected to the database successfully");  
      
      // Accessing the database 
      MongoDatabase database = mongo.getDatabase("myDb"); 
      System.out.println("Collection created successfully"); 
      for (String name : database.listCollectionNames()) { 
         System.out.println(name); 
      } 
   }
}

Saat menyusun, program di atas memberi Anda hasil sebagai berikut -

Connected to the database successfully 
Collection created successfully 
myCollection 
myCollection1 
myCollection5

Metode MongoDB yang tersisa save(), limit(), skip(), sort() dll bekerja sama seperti yang dijelaskan dalam tutorial berikutnya.

Untuk menggunakan MongoDB dengan PHP, Anda perlu menggunakan driver PHP MongoDB. Unduh driver dari url Unduh Driver PHP . Pastikan untuk mengunduh rilis terbarunya. Sekarang unzip arsip dan letakkan php_mongo.dll di direktori ekstensi PHP Anda ("ext" secara default) dan tambahkan baris berikut ke file php.ini Anda -

extension = php_mongo.dll

Buat Koneksi dan Pilih Database

Untuk membuat koneksi, Anda perlu menentukan nama database, jika database tidak ada maka MongoDB membuatnya secara otomatis.

Berikut adalah potongan kode untuk menghubungkan ke database -

<?php
   // connect to mongodb
   $m = new MongoClient();
	
   echo "Connection to database successfully";
   // select a database
   $db = $m->mydb;
	
   echo "Database mydb selected";
?>

Ketika program dijalankan, itu akan menghasilkan hasil sebagai berikut -

Connection to database successfully
Database mydb selected

Buat Koleksi

Berikut adalah potongan kode untuk membuat koleksi -

<?php
   // connect to mongodb
   $m = new MongoClient(); echo "Connection to database successfully"; // select a database $db = $m->mydb; echo "Database mydb selected"; $collection = $db->createCollection("mycol");
   echo "Collection created succsessfully";
?>

Ketika program dijalankan, itu akan menghasilkan hasil sebagai berikut -

Connection to database successfully
Database mydb selected
Collection created succsessfully

Sisipkan Dokumen

Untuk memasukkan dokumen ke MongoDB, insert() metode digunakan.

Berikut adalah potongan kode untuk menyisipkan dokumen -

<?php
   // connect to mongodb
   $m = new MongoClient();
   echo "Connection to database successfully";
	
   // select a database
   $db = $m->mydb;
   echo "Database mydb selected";
   $collection = $db->mycol;
   echo "Collection selected succsessfully";
	
   $document = array( "title" => "MongoDB", "description" => "database", "likes" => 100, "url" => "http://www.tutorialspoint.com/mongodb/", "by" => "tutorials point" ); $collection->insert($document);
   echo "Document inserted successfully";
?>

Ketika program dijalankan, itu akan menghasilkan hasil sebagai berikut -

Connection to database successfully
Database mydb selected
Collection selected succsessfully
Document inserted successfully

Temukan Semua Dokumen

Untuk memilih semua dokumen dari koleksi, metode find () digunakan.

Berikut adalah potongan kode untuk memilih semua dokumen -

<?php
   // connect to mongodb
   $m = new MongoClient();
   echo "Connection to database successfully";
	
   // select a database
   $db = $m->mydb;
   echo "Database mydb selected";
   $collection = $db->mycol;
   echo "Collection selected succsessfully";

   $cursor = $collection->find();
   // iterate cursor to display title of documents
	
   foreach ($cursor as $document) {
      echo $document["title"] . "\n";
   }
?>

Ketika program dijalankan, itu akan menghasilkan hasil sebagai berikut -

Connection to database successfully
Database mydb selected
Collection selected succsessfully {
   "title": "MongoDB"
}

Perbarui Dokumen

Untuk memperbarui dokumen, Anda perlu menggunakan metode update ().

Pada contoh berikut, kami akan memperbarui judul dokumen yang disisipkan menjadi MongoDB Tutorial. Berikut adalah potongan kode untuk memperbarui dokumen -

<?php
   // connect to mongodb
   $m = new MongoClient();
   echo "Connection to database successfully";
	
   // select a database
   $db = $m->mydb;
   echo "Database mydb selected";
   $collection = $db->mycol;
   echo "Collection selected succsessfully";

   // now update the document
   $collection->update(array("title"=>"MongoDB"), array('$set'=>array("title"=>"MongoDB Tutorial")));
   echo "Document updated successfully";
	
   // now display the updated document
   $cursor = $collection->find();
	
   // iterate cursor to display title of documents
   echo "Updated document";
	
   foreach ($cursor as $document) {
      echo $document["title"] . "\n";
   }
?>

Ketika program dijalankan, itu akan menghasilkan hasil sebagai berikut -

Connection to database successfully
Database mydb selected
Collection selected succsessfully
Document updated successfully
Updated document {
   "title": "MongoDB Tutorial"
}

Hapus Dokumen

Untuk menghapus dokumen, Anda perlu menggunakan metode remove ().

Pada contoh berikut, kami akan menghapus dokumen yang memiliki judul MongoDB Tutorial. Berikut adalah potongan kode untuk menghapus dokumen -

<?php
   // connect to mongodb
   $m = new MongoClient();
   echo "Connection to database successfully";
	
   // select a database
   $db = $m->mydb;
   echo "Database mydb selected";
   $collection = $db->mycol;
   echo "Collection selected succsessfully";
   
   // now remove the document
   $collection->remove(array("title"=>"MongoDB Tutorial"),false); echo "Documents deleted successfully"; // now display the available documents $cursor = $collection->find(); // iterate cursor to display title of documents echo "Updated document"; foreach ($cursor as $document) { echo $document["title"] . "\n";
   }
?>

Ketika program dijalankan, itu akan menghasilkan hasil sebagai berikut -

Connection to database successfully
Database mydb selected
Collection selected succsessfully
Documents deleted successfully

Pada contoh di atas, parameter kedua adalah tipe boolean dan digunakan untuk justOne bidang remove() metode.

Metode MongoDB yang tersisa findOne(), save(), limit(), skip(), sort() dll bekerja sama seperti yang dijelaskan di atas.

Hubungan di MongoDB menunjukkan bagaimana berbagai dokumen secara logis terkait satu sama lain. Hubungan dapat dimodelkan melaluiEmbedded dan Referencedpendekatan. Hubungan tersebut dapat berupa 1: 1, 1: N, N: 1 atau N: N.

Mari kita pertimbangkan kasus penyimpanan alamat untuk pengguna. Jadi, satu pengguna dapat memiliki beberapa alamat sehingga menjadikannya sebagai hubungan 1: N.

Berikut adalah contoh struktur dokumen user dokumen -

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991"
}

Berikut adalah contoh struktur dokumen address dokumen -

{
   "_id":ObjectId("52ffc4a5d85242602e000000"),
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "Los Angeles",
   "state": "California"
}

Memodelkan Hubungan Tertanam

Dalam pendekatan tertanam, kami akan menanamkan dokumen alamat di dalam dokumen pengguna.

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      {
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      },
      {
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      }
   ]
}

Pendekatan ini memelihara semua data terkait dalam satu dokumen, yang membuatnya mudah untuk diambil dan dipelihara. Seluruh dokumen dapat diambil dalam satu query seperti -

>db.users.findOne({"name":"Tom Benzamin"},{"address":1})

Perhatikan bahwa dalam kueri di atas, db dan users adalah database dan koleksi masing-masing.

Kekurangannya adalah jika ukuran dokumen yang disematkan terus bertambah, hal itu dapat memengaruhi kinerja baca / tulis.

Memodelkan Hubungan yang Dirujuk

Ini adalah pendekatan mendesain hubungan yang dinormalisasi. Dalam pendekatan ini, baik dokumen pengguna dan alamat akan disimpan secara terpisah tetapi dokumen pengguna akan berisi bidang yang akan mereferensikan dokumen alamatid bidang.

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

Seperti yang ditunjukkan di atas, dokumen pengguna berisi bidang array address_idsyang berisi ObjectIds dari alamat yang sesuai. Dengan menggunakan ObjectIds ini, kita dapat menanyakan dokumen alamat dan mendapatkan detail alamat dari sana. Dengan pendekatan ini, kita membutuhkan dua kueri: pertama untuk mengambiladdress_ids bidang dari user dokumen dan kedua untuk mengambil alamat ini dari address koleksi.

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})

Seperti yang terlihat di bab terakhir hubungan MongoDB, untuk mengimplementasikan struktur database yang dinormalisasi di MongoDB, kami menggunakan konsep Referenced Relationships juga disebut sebagai Manual Referencesdi mana kita secara manual menyimpan id dokumen yang direferensikan di dalam dokumen lain. Namun, dalam kasus di mana dokumen berisi referensi dari koleksi yang berbeda, kami dapat menggunakanMongoDB DBRefs.

DBRefs vs Referensi Manual

Sebagai contoh skenario, di mana kita akan menggunakan DBRefs daripada referensi manual, pertimbangkan database tempat kita menyimpan berbagai jenis alamat (rumah, kantor, surat, dll.) Di koleksi yang berbeda (address_home, address_office, address_mailing, dll). Sekarang, saat auserdokumen collection mereferensikan sebuah alamat, ia juga perlu menentukan koleksi mana yang akan diperiksa berdasarkan jenis alamat. Dalam skenario seperti ini di mana dokumen mereferensikan dokumen dari banyak koleksi, kita harus menggunakan DBRefs.

Menggunakan DBRefs

Ada tiga bidang di DBRefs -

  • $ref - Bidang ini menentukan koleksi dokumen yang direferensikan

  • $id - Bidang ini menentukan bidang _id dari dokumen yang direferensikan

  • $db - Ini adalah bidang opsional dan berisi nama database tempat dokumen yang dirujuk berada

Pertimbangkan contoh dokumen pengguna yang memiliki kolom DBRef address seperti yang ditunjukkan dalam cuplikan kode -

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"),
   "$db": "tutorialspoint"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

Itu address Kolom DBRef di sini menetapkan bahwa dokumen alamat yang direferensikan berada address_home koleksi di bawah tutorialspoint database dan memiliki id 534009e4d852427820000002.

Kode berikut secara dinamis terlihat dalam koleksi yang ditentukan oleh $ref parameter (address_home dalam kasus kami) untuk dokumen dengan id seperti yang ditentukan oleh $id parameter di DBRef.

>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})

Kode di atas mengembalikan dokumen alamat berikut yang ada di address_home koleksi -

{
   "_id" : ObjectId("534009e4d852427820000002"),
   "building" : "22 A, Indiana Apt",
   "pincode" : 123456,
   "city" : "Los Angeles",
   "state" : "California"
}

Di bab ini, kita akan belajar tentang kueri yang tercakup.

Apa itu Kueri Tercakup?

Sesuai dengan dokumentasi resmi MongoDB, kueri yang tercakup adalah kueri di mana -

  • Semua bidang dalam kueri adalah bagian dari indeks.
  • Semua bidang yang dikembalikan dalam kueri berada dalam indeks yang sama.

Karena semua bidang yang ada dalam kueri adalah bagian dari indeks, MongoDB mencocokkan kondisi kueri dan mengembalikan hasilnya menggunakan indeks yang sama tanpa benar-benar melihat ke dalam dokumen. Karena indeks ada dalam RAM, mengambil data dari indeks jauh lebih cepat dibandingkan dengan mengambil data dengan memindai dokumen.

Menggunakan Kueri Tercakup

Untuk menguji kueri yang tercakup, pertimbangkan dokumen berikut di users koleksi -

{
   "_id": ObjectId("53402597d852426020000002"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

Kami pertama-tama akan membuat indeks gabungan untuk users koleksi di lapangan gender dan user_name menggunakan kueri berikut -

>db.users.ensureIndex({gender:1,user_name:1})

Sekarang, indeks ini akan mencakup kueri berikut -

>db.users.find({gender:"M"},{user_name:1,_id:0})

Artinya, untuk query di atas, MongoDB tidak akan mencari ke dalam dokumen database. Sebaliknya itu akan mengambil data yang dibutuhkan dari data yang diindeks dengan sangat cepat.

Karena indeks kami tidak termasuk _idlapangan, kami telah secara eksplisit mengecualikannya dari kumpulan hasil kueri kami, karena MongoDB secara default mengembalikan bidang _id di setiap kueri. Jadi kueri berikut tidak akan tercakup di dalam indeks yang dibuat di atas -

>db.users.find({gender:"M"},{user_name:1})

Terakhir, ingat bahwa indeks tidak dapat mencakup kueri jika -

  • Salah satu bidang yang diindeks adalah larik
  • Salah satu bidang yang diindeks adalah sub dokumen

Menganalisis kueri adalah aspek yang sangat penting untuk mengukur seberapa efektif database dan desain pengindeksan. Kami akan belajar tentang yang sering digunakan$explain dan $hint pertanyaan.

Menggunakan $ menjelaskan

Itu $explainoperator memberikan informasi tentang kueri, indeks yang digunakan dalam kueri dan statistik lainnya. Ini sangat berguna saat menganalisis seberapa baik indeks Anda dioptimalkan.

Di bab terakhir, kami telah membuat indeks untuk users koleksi di lapangan gender dan user_name menggunakan kueri berikut -

>db.users.ensureIndex({gender:1,user_name:1})

Kami sekarang akan menggunakan $explain pada pertanyaan berikut -

>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

Kueri menjelaskan () di atas mengembalikan hasil analisis berikut -

{
   "cursor" : "BtreeCursor gender_1_user_name_1",
   "isMultiKey" : false,
   "n" : 1,
   "nscannedObjects" : 0,
   "nscanned" : 1,
   "nscannedObjectsAllPlans" : 0,
   "nscannedAllPlans" : 1,
   "scanAndOrder" : false,
   "indexOnly" : true,
   "nYields" : 0,
   "nChunkSkips" : 0,
   "millis" : 0,
   "indexBounds" : {
      "gender" : [
         [
            "M",
            "M"
         ]
      ],
      "user_name" : [
         [
            {
               "$minElement" : 1 }, { "$maxElement" : 1
            }
         ]
      ]
   }
}

Sekarang kita akan melihat bidang dalam kumpulan hasil ini -

  • Nilai sebenarnya dari indexOnly menunjukkan bahwa kueri ini telah menggunakan pengindeksan.

  • Itu cursorkolom menentukan jenis kursor yang digunakan. Jenis BTreeCursor menunjukkan bahwa indeks digunakan dan juga memberikan nama indeks yang digunakan. BasicCursor menunjukkan bahwa pemindaian penuh dilakukan tanpa menggunakan indeks apa pun.

  • n menunjukkan jumlah dokumen yang cocok dikembalikan.

  • nscannedObjects menunjukkan jumlah dokumen yang dipindai.

  • nscanned menunjukkan jumlah dokumen atau entri indeks yang dipindai.

Menggunakan $ hint

Itu $hintoperator memaksa pengoptimal kueri untuk menggunakan indeks yang ditentukan untuk menjalankan kueri. Ini sangat berguna ketika Anda ingin menguji kinerja kueri dengan indeks berbeda. Misalnya, kueri berikut menentukan indeks pada bidanggender dan user_name untuk digunakan untuk kueri ini -

>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

Untuk menganalisis kueri di atas menggunakan $ menjelaskan -

>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()

Data Model untuk Operasi Atom

Pendekatan yang direkomendasikan untuk menjaga atomicity adalah dengan menyimpan semua informasi terkait, yang sering diperbarui bersama dalam satu dokumen menggunakan embedded documents. Ini akan memastikan bahwa semua pembaruan untuk satu dokumen bersifat atomic.

Pertimbangkan dokumen produk berikut -

{
   "_id":1,
   "product_name": "Samsung S3",
   "category": "mobiles",
   "product_total": 5,
   "product_available": 3,
   "product_bought_by": [
      {
         "customer": "john",
         "date": "7-Jan-2014"
      },
      {
         "customer": "mark",
         "date": "8-Jan-2014"
      }
   ]
}

Dalam dokumen ini, kami telah menyematkan informasi pelanggan yang membeli produk di product_bought_bybidang. Sekarang, setiap kali pelanggan baru membeli produk, pertama-tama kami akan memeriksa apakah produk tersebut masih tersedia menggunakanproduct_availablebidang. Jika tersedia, kami akan mengurangi nilai bidang product_available serta menyisipkan dokumen pelanggan baru yang disematkan ke bidang product_bought_by. Kami akan menggunakanfindAndModify perintah untuk fungsionalitas ini karena mencari dan memperbarui dokumen sekaligus.

>db.products.findAndModify({ 
   query:{_id:2,product_available:{$gt:0}}, 
   update:{ 
      $inc:{product_available:-1}, $push:{product_bought_by:{customer:"rob",date:"9-Jan-2014"}} 
   }    
})

Pendekatan kami terhadap dokumen yang disematkan dan menggunakan kueri findAndModify memastikan bahwa informasi pembelian produk diperbarui hanya jika produk tersebut tersedia. Dan seluruh transaksi ini berada dalam kueri yang sama, bersifat atomik.

Berbeda dengan ini, pertimbangkan skenario di mana kami mungkin menyimpan ketersediaan produk dan informasi tentang siapa yang telah membeli produk secara terpisah. Dalam hal ini, pertama-tama kami akan memeriksa apakah produk tersedia menggunakan kueri pertama. Kemudian di kueri kedua kami akan memperbarui informasi pembelian. Namun, mungkin saja di antara eksekusi kedua kueri ini, beberapa pengguna lain telah membeli produk dan produk tersebut tidak lagi tersedia. Tanpa mengetahui ini, kueri kedua kami akan memperbarui informasi pembelian berdasarkan hasil kueri pertama kami. Ini akan membuat database tidak konsisten karena kita telah menjual produk yang tidak tersedia.

Pertimbangkan dokumen berikut dari users koleksi -

{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

Dokumen di atas berisi address sub-document dan a tags array.

Mengindeks Bidang Array

Misalkan kita ingin mencari dokumen pengguna berdasarkan tag pengguna. Untuk ini, kami akan membuat indeks pada larik tag dalam koleksi.

Membuat indeks pada larik pada gilirannya membuat entri indeks terpisah untuk setiap bidangnya. Jadi dalam kasus kita ketika kita membuat indeks pada larik tag, indeks terpisah akan dibuat untuk musik nilainya, kriket dan blog.

Untuk membuat indeks pada larik tag, gunakan kode berikut -

>db.users.ensureIndex({"tags":1})

Setelah membuat indeks, kita dapat mencari di kolom tag koleksi seperti ini -

>db.users.find({tags:"cricket"})

Untuk memverifikasi bahwa pengindeksan yang tepat digunakan, gunakan yang berikut ini explain perintah -

>db.users.find({tags:"cricket"}).explain()

Perintah di atas menghasilkan "cursor": "BtreeCursor tags_1" yang mengonfirmasi bahwa pengindeksan yang tepat digunakan.

Mengindeks Bidang Sub-Dokumen

Misalkan kita ingin mencari dokumen berdasarkan field kota, negara bagian dan kode PIN. Karena semua bidang ini adalah bagian dari bidang sub-dokumen alamat, kami akan membuat indeks pada semua bidang sub-dokumen.

Untuk membuat indeks pada ketiga bidang sub-dokumen, gunakan kode berikut -

>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

Setelah indeks dibuat, kita dapat mencari bidang sub-dokumen mana pun yang menggunakan indeks ini sebagai berikut -

>db.users.find({"address.city":"Los Angeles"})

Ingatlah bahwa ekspresi kueri harus mengikuti urutan indeks yang ditentukan. Jadi indeks yang dibuat di atas akan mendukung kueri berikut -

>db.users.find({"address.city":"Los Angeles","address.state":"California"})

Ini juga akan mendukung kueri berikut -

>db.users.find({"address.city":"LosAngeles","address.state":"California",
   "address.pincode":"123"})

Dalam bab ini, kita akan mempelajari tentang Batasan Pengindeksan dan komponen lainnya.

Overhead ekstra

Setiap indeks menempati beberapa ruang serta menyebabkan overhead pada setiap penyisipan, pembaruan, dan penghapusan. Jadi jika Anda jarang menggunakan koleksi Anda untuk operasi baca, masuk akal untuk tidak menggunakan indeks.

Penggunaan RAM

Karena indeks disimpan dalam RAM, Anda harus memastikan bahwa ukuran total indeks tidak melebihi batas RAM. Jika ukuran total meningkatkan ukuran RAM, itu akan mulai menghapus beberapa indeks, menyebabkan hilangnya kinerja.

Batasan Kueri

Pengindeksan tidak dapat digunakan dalam kueri yang menggunakan -

  • Ekspresi reguler atau operator negasi seperti $nin, $tidak, dll.
  • Operator aritmatika seperti $ mod, dll.
  • $ dimana klausa

Karenanya, selalu disarankan untuk memeriksa penggunaan indeks untuk kueri Anda.

Batas Kunci Indeks

Mulai dari versi 2.6, MongoDB tidak akan membuat indeks jika nilai bidang indeks yang ada melebihi batas kunci indeks.

Memasukkan Dokumen Melebihi Batas Kunci Indeks

MongoDB tidak akan memasukkan dokumen apa pun ke dalam koleksi yang diindeks jika nilai bidang yang diindeks dari dokumen ini melebihi batas kunci indeks. Sama halnya dengan utilitas mongorestore dan mongoimport.

Rentang Maksimum

  • Koleksi tidak boleh memiliki lebih dari 64 indeks.
  • Panjang nama indeks tidak boleh lebih dari 125 karakter.
  • Indeks gabungan dapat memiliki maksimal 31 bidang yang diindeks.

Kami telah menggunakan Id Objek MongoDB di semua bab sebelumnya. Dalam bab ini, kita akan memahami struktur ObjectId.

Sebuah ObjectId adalah tipe BSON 12-byte yang memiliki struktur berikut -

  • 4 byte pertama mewakili detik sejak zaman unix
  • 3 byte berikutnya adalah pengenal mesin
  • 2 byte berikutnya terdiri dari process id
  • 3 byte terakhir adalah nilai penghitung acak

MongoDB menggunakan ObjectIds sebagai nilai default _idbidang setiap dokumen, yang dihasilkan saat pembuatan dokumen apa pun. Kombinasi kompleks ObjectId membuat semua bidang _id unik.

Membuat ObjectId Baru

Untuk menghasilkan ObjectId baru gunakan kode berikut -

>newObjectId = ObjectId()

Pernyataan di atas mengembalikan id yang dibuat secara unik berikut -

ObjectId("5349b4ddd2781d08c09890f3")

Alih-alih MongoDB membuat ObjectId, Anda juga bisa memberikan id 12-byte -

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

Membuat Stempel Waktu Dokumen

Karena _id ObjectId secara default menyimpan stempel waktu 4-byte, dalam banyak kasus Anda tidak perlu menyimpan waktu pembuatan dokumen apa pun. Anda dapat mengambil waktu pembuatan dokumen menggunakan metode getTimestamp -

>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

Ini akan mengembalikan waktu pembuatan dokumen ini dalam format tanggal ISO -

ISODate("2014-04-12T21:49:17Z")

Mengonversi ObjectId ke String

Dalam beberapa kasus, Anda mungkin memerlukan nilai ObjectId dalam format string. Untuk mengonversi ObjectId dalam string, gunakan kode berikut -

>newObjectId.str

Kode di atas akan mengembalikan format string dari Guid -

5349b4ddd2781d08c09890f3

Sesuai dokumentasi MongoDB, Map-reduceadalah paradigma pemrosesan data untuk memadatkan volume data yang besar menjadi hasil agregat yang berguna. MongoDB menggunakanmapReduceperintah untuk operasi pengurangan peta. MapReduce umumnya digunakan untuk memproses kumpulan data yang besar.

Perintah MapReduce

Berikut ini adalah sintaks dari perintah mapReduce dasar -

>db.collection.mapReduce(
   function() {emit(key,value);},  //map function
   function(key,values) {return reduceFunction}, {   //reduce function
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

Pertama-tama, fungsi pengurangan peta mengkueri pengumpulan, lalu memetakan dokumen hasil untuk memancarkan pasangan nilai kunci, yang kemudian dikurangi berdasarkan kunci yang memiliki beberapa nilai.

Dalam sintaks di atas -

  • map adalah fungsi javascript yang memetakan nilai dengan kunci dan memancarkan pasangan nilai kunci

  • reduce adalah fungsi javascript yang mengurangi atau mengelompokkan semua dokumen yang memiliki kunci yang sama

  • out menentukan lokasi hasil kueri pengurangan peta

  • query menentukan kriteria pemilihan opsional untuk memilih dokumen

  • sort menentukan kriteria pengurutan opsional

  • limit menentukan jumlah dokumen maksimum opsional yang akan dikembalikan

Menggunakan MapReduce

Pertimbangkan struktur dokumen berikut yang menyimpan posting pengguna. Dokumen menyimpan nama_user pengguna dan status posting.

{
   "post_text": "tutorialspoint is an awesome website for tutorials",
   "user_name": "mark",
   "status":"active"
}

Sekarang, kita akan menggunakan fungsi mapReduce di file posts koleksi untuk memilih semua posting aktif, kelompokkan berdasarkan user_name dan kemudian hitung jumlah posting oleh setiap pengguna menggunakan kode berikut -

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
	
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

Kueri mapReduce di atas mengeluarkan hasil sebagai berikut -

{
   "result" : "post_total",
   "timeMillis" : 9,
   "counts" : {
      "input" : 4,
      "emit" : 4,
      "reduce" : 2,
      "output" : 2
   },
   "ok" : 1,
}

Hasilnya menunjukkan bahwa total 4 dokumen sesuai dengan query (status: "aktif"), fungsi map mengeluarkan 4 dokumen dengan key-value pair dan terakhir fungsi reduksi mengelompokkan dokumen yang dipetakan memiliki kunci yang sama menjadi 2.

Untuk melihat hasil dari query mapReduce ini, gunakan operator find -

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
	
).find()

Kueri di atas memberikan hasil berikut yang menunjukkan bahwa kedua pengguna tom dan mark memiliki dua pos dalam status aktif -

{ "_id" : "tom", "value" : 2 }
{ "_id" : "mark", "value" : 2 }

Dengan cara yang sama, kueri MapReduce dapat digunakan untuk membuat kueri agregasi kompleks yang besar. Penggunaan fungsi Javascript khusus memanfaatkan MapReduce yang sangat fleksibel dan kuat.

Mulai dari versi 2.4, MongoDB mulai mendukung indeks teks untuk mencari di dalam konten string. ItuText Search menggunakan teknik stemming untuk mencari kata-kata tertentu dalam bidang string dengan membuang kata stop seperti stemming a, an, the, dll. Saat ini, MongoDB mendukung sekitar 15 bahasa.

Mengaktifkan Pencarian Teks

Awalnya, Pencarian Teks adalah fitur eksperimental tetapi mulai dari versi 2.6, konfigurasi diaktifkan secara default. Tetapi jika Anda menggunakan versi MongoDB sebelumnya, Anda harus mengaktifkan pencarian teks dengan kode berikut -

>db.adminCommand({setParameter:true,textSearchEnabled:true})

Membuat Indeks Teks

Pertimbangkan dokumen berikut di bawah posts koleksi yang berisi teks posting dan tag-nya -

{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}

Kami akan membuat indeks teks pada bidang post_text sehingga kami dapat mencari di dalam teks posting kami -

>db.posts.ensureIndex({post_text:"text"})

Menggunakan Indeks Teks

Sekarang setelah kita membuat indeks teks pada bidang post_text, kita akan mencari semua posting yang memiliki kata tersebut tutorialspoint dalam teks mereka.

>db.posts.find({$text:{$search:"tutorialspoint"}})

Perintah di atas mengembalikan dokumen hasil berikut yang memiliki kata tutorialspoint dalam teks kiriman mereka -

{ 
   "_id" : ObjectId("53493d14d852429c10000002"), 
   "post_text" : "enjoy the mongodb articles on tutorialspoint", 
   "tags" : [ "mongodb", "tutorialspoint" ]
}
{
   "_id" : ObjectId("53493d1fd852429c10000003"), 
   "post_text" : "writing tutorials on mongodb",
   "tags" : [ "mongodb", "tutorial" ] 
}

Jika Anda menggunakan versi lama MongoDB, Anda harus menggunakan perintah berikut -

>db.posts.runCommand("text",{search:" tutorialspoint "})

Menggunakan Pencarian Teks sangat meningkatkan efisiensi pencarian dibandingkan dengan pencarian biasa.

Menghapus Indeks Teks

Untuk menghapus indeks teks yang ada, pertama-tama temukan nama indeks menggunakan kueri berikut -

>db.posts.getIndexes()

Setelah mendapatkan nama indeks Anda dari kueri di atas, jalankan perintah berikut. Sini,post_text_text adalah nama indeks.

>db.posts.dropIndex("post_text_text")

Ekspresi Reguler sering digunakan dalam semua bahasa untuk mencari pola atau kata dalam string apa pun. MongoDB juga menyediakan fungsionalitas ekspresi reguler untuk pencocokan pola string menggunakan ekstensi$regexoperator. MongoDB menggunakan PCRE (Perl Compatible Regular Expression) sebagai bahasa ekspresi reguler.

Tidak seperti pencarian teks, kita tidak perlu melakukan konfigurasi atau perintah apa pun untuk menggunakan ekspresi reguler.

Pertimbangkan struktur dokumen berikut di bawah posts koleksi yang berisi teks posting dan tag-nya -

{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}

Menggunakan ekspresi regex

Kueri ekspresi reguler berikut mencari semua entri yang berisi string tutorialspoint di dalamnya -

>db.posts.find({post_text:{$regex:"tutorialspoint"}})

Kueri yang sama juga dapat ditulis sebagai -

>db.posts.find({post_text:/tutorialspoint/})

Menggunakan ekspresi regex dengan Case Insensitive

Untuk membuat kasus pencarian tidak sensitif, kami menggunakan $options parameter dengan nilai $i. Perintah berikut akan mencari string yang memiliki kata tersebuttutorialspoint, terlepas dari kasus kecil atau kapital -

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

Salah satu hasil yang dikembalikan dari kueri ini adalah dokumen berikut yang berisi kata tersebut tutorialspoint dalam kasus yang berbeda -

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
}

Menggunakan regex untuk Array Elements

Kita juga bisa menggunakan konsep regex pada bidang array. Ini sangat penting ketika kami menerapkan fungsionalitas tag. Jadi, jika Anda ingin mencari semua posting yang memiliki tag dimulai dari kata tutorial (baik tutorial atau tutorial atau tutorialpoint atau tutorialphp), Anda dapat menggunakan kode berikut -

>db.posts.find({tags:{$regex:"tutorial"}})

Mengoptimalkan Kueri Ekspresi Reguler

  • Jika bidang dokumen indexed, kueri akan menggunakan make menggunakan nilai yang diindeks untuk mencocokkan ekspresi reguler. Ini membuat pencarian menjadi sangat cepat dibandingkan dengan ekspresi reguler yang memindai seluruh koleksi.

  • Jika ekspresi reguler adalah a prefix expression, semua kecocokan dimaksudkan untuk dimulai dengan karakter string tertentu. Misalnya, jika ekspresi regex adalah^tut, maka kueri harus mencari hanya string yang diawali dengan tut.

RockMongo adalah alat administrasi MongoDB yang dapat digunakan untuk mengelola server, database, koleksi, dokumen, indeks, dan banyak lagi. Ini menyediakan cara yang sangat ramah pengguna untuk membaca, menulis, dan membuat dokumen. Ini mirip dengan alat PHPMyAdmin untuk PHP dan MySQL.

Mendownload RockMongo

Anda dapat mengunduh versi terbaru RockMongo dari sini: https://github.com/iwind/rockmongo

Menginstal RockMongo

Setelah diunduh, Anda dapat mengekstrak paket di folder root server Anda dan mengganti nama folder yang diekstrak menjadi rockmongo. Buka browser web apa saja dan aksesindex.phphalaman dari folder rockmongo. Masukkan admin / admin sebagai nama pengguna / kata sandi masing-masing.

Bekerja dengan RockMongo

Kami sekarang akan melihat beberapa operasi dasar yang dapat Anda lakukan dengan RockMongo.

Membuat Database Baru

Untuk membuat database baru, klik Databasestab. KlikCreate New Database. Pada layar berikutnya, berikan nama database baru dan klikCreate. Anda akan melihat database baru ditambahkan di panel kiri.

Membuat Koleksi Baru

Untuk membuat koleksi baru di dalam database, klik database tersebut dari panel kiri. Klik padaNew Collectiontautan di atas. Berikan nama koleksi yang diperlukan. Jangan khawatir tentang bidang lain Dibatasi, Ukuran dan Maks. KlikCreate. Koleksi baru akan dibuat dan Anda dapat melihatnya di panel kiri.

Membuat Dokumen Baru

Untuk membuat dokumen baru, klik pada koleksi di mana Anda ingin menambahkan dokumen. Saat Anda mengeklik sebuah koleksi, Anda akan dapat melihat semua dokumen dalam koleksi itu yang terdaftar di sana. Untuk membuat dokumen baru, klik padaInserttautan di atas. Anda dapat memasukkan data dokumen baik dalam format JSON atau array dan klikSave.

Ekspor / Impor Data

Untuk mengimpor / mengekspor data dari koleksi apa pun, klik koleksi itu dan kemudian klik Export/Importtautan di panel atas. Ikuti petunjuk selanjutnya untuk mengekspor data Anda dalam format zip dan kemudian impor file zip yang sama untuk mengimpor kembali data.

GridFSadalah spesifikasi MongoDB untuk menyimpan dan mengambil file besar seperti gambar, file audio, file video, dll. Ini adalah jenis sistem file untuk menyimpan file tetapi datanya disimpan dalam koleksi MongoDB. GridFS memiliki kemampuan untuk menyimpan file lebih besar dari batas ukuran dokumen 16MB.

GridFS membagi file menjadi beberapa bagian dan menyimpan setiap potongan data dalam dokumen terpisah, masing-masing berukuran maksimal 255k.

GridFS secara default menggunakan dua koleksi fs.files dan fs.chunksuntuk menyimpan metadata file dan potongannya. Setiap potongan diidentifikasi oleh bidang ObjectId _id yang unik. Fs.files berfungsi sebagai dokumen induk. Itufiles_id bidang di dokumen fs.chunks menautkan potongan ke induknya.

Berikut ini adalah contoh dokumen dari fs.files collection -

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

Dokumen tersebut menentukan nama file, ukuran potongan, tanggal upload, dan panjang.

Berikut ini adalah contoh dokumen dari dokumen fs.chunks -

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

Menambahkan File ke GridFS

Sekarang, kami akan menyimpan file mp3 menggunakan GridFS menggunakan putperintah. Untuk ini, kami akan menggunakanmongofiles.exe utilitas yang ada di folder bin dari folder instalasi MongoDB.

Buka command prompt Anda, arahkan ke mongofiles.exe di folder bin folder instalasi MongoDB dan ketik kode berikut -

>mongofiles.exe -d gridfs put song.mp3

Sini, gridfsadalah nama database tempat file akan disimpan. Jika database tidak ada, MongoDB secara otomatis akan membuat dokumen baru dengan cepat. Song.mp3 adalah nama file yang diunggah. Untuk melihat dokumen file dalam database, Anda dapat menggunakan query find -

>db.fs.files.find()

Perintah di atas mengembalikan dokumen berikut -

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
   filename: "song.mp3", 
   chunkSize: 261120, 
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959 
}

Kita juga dapat melihat semua potongan yang ada dalam koleksi fs.chunks yang terkait dengan file yang disimpan dengan kode berikut, menggunakan id dokumen yang dikembalikan dalam kueri sebelumnya -

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

Dalam kasus saya, kueri mengembalikan 40 dokumen yang berarti bahwa seluruh dokumen mp3 dibagi menjadi 40 potongan data.

Capped collectionsadalah koleksi melingkar ukuran tetap yang mengikuti urutan penyisipan untuk mendukung kinerja tinggi untuk membuat, membaca, dan menghapus operasi. Secara melingkar, ini berarti bahwa ketika ukuran tetap yang dialokasikan ke koleksi habis, itu akan mulai menghapus dokumen terlama dalam koleksi tanpa memberikan perintah eksplisit apa pun.

Koleksi yang dibatasi membatasi pembaruan ke dokumen jika pembaruan menghasilkan ukuran dokumen yang meningkat. Karena koleksi yang dibatasi menyimpan dokumen dalam urutan penyimpanan disk, ini memastikan bahwa ukuran dokumen tidak meningkatkan ukuran yang dialokasikan pada disk. Koleksi yang dibatasi paling baik untuk menyimpan informasi log, data cache, atau data volume tinggi lainnya.

Membuat Koleksi Tertutup

Untuk membuat koleksi capped, kami menggunakan perintah createCollection normal tetapi dengan capped pilihan sebagai true dan menentukan ukuran maksimum koleksi dalam byte.

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

Selain ukuran koleksi, kami juga dapat membatasi jumlah dokumen dalam koleksi menggunakan max parameter -

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

Jika Anda ingin memeriksa apakah koleksi dibatasi atau tidak, gunakan yang berikut ini isCapped perintah -

>db.cappedLogCollection.isCapped()

Jika sudah ada koleksi yang Anda rencanakan untuk diubah menjadi dibatasi, Anda dapat melakukannya dengan kode berikut -

>db.runCommand({"convertToCapped":"posts",size:10000})

Kode ini akan mengubah koleksi kami yang ada posts ke koleksi yang dibatasi.

Menanyakan Koleksi Terbatas

Secara default, kueri pencarian pada koleksi yang dibatasi akan menampilkan hasil dalam urutan penyisipan. Tetapi jika Anda ingin dokumen diambil dalam urutan terbalik, gunakansort perintah seperti yang ditunjukkan pada kode berikut -

>db.cappedLogCollection.find().sort({$natural:-1})

Ada beberapa poin penting lainnya mengenai koleksi terbatas yang perlu diketahui -

  • Kami tidak dapat menghapus dokumen dari koleksi yang dibatasi.

  • Tidak ada indeks default yang ada dalam koleksi yang dibatasi, bahkan di bidang _id.

  • Saat memasukkan dokumen baru, MongoDB tidak harus benar-benar mencari tempat untuk menampung dokumen baru di disk. Itu dapat secara membabi buta memasukkan dokumen baru di bagian belakang koleksi. Ini membuat operasi penyisipan dalam koleksi yang dibatasi menjadi sangat cepat.

  • Demikian pula, saat membaca dokumen, MongoDB mengembalikan dokumen dalam urutan yang sama seperti yang ada di disk. Ini membuat operasi pembacaan menjadi sangat cepat.

MongoDB tidak memiliki fungsionalitas penambahan otomatis out-of-the-box, seperti database SQL. Secara default, ini menggunakan ObjectId 12-byte untuk file_idlapangan sebagai kunci utama untuk mengidentifikasi dokumen secara unik. Namun, mungkin ada skenario di mana kita mungkin ingin bidang _id memiliki beberapa nilai auto-increment selain ObjectId.

Karena ini bukan fitur default di MongoDB, kami secara terprogram akan mencapai fungsionalitas ini dengan menggunakan file counters koleksi seperti yang disarankan oleh dokumentasi MongoDB.

Menggunakan Counter Collection

Simak berikut ini productsdokumen. Kami ingin bidang _id menjadiauto-incremented integer sequence mulai dari 1,2,3,4 hingga n.

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

Untuk ini, buat file counters collection, yang akan melacak nilai urutan terakhir untuk semua bidang urutan.

>db.createCollection("counters")

Sekarang, kita akan memasukkan dokumen berikut ke dalam koleksi counter productid sebagai kuncinya -

{
  "_id":"productid",
  "sequence_value": 0
}

Lapangan sequence_value melacak nilai terakhir dari urutan.

Gunakan kode berikut untuk memasukkan dokumen urutan ini di koleksi counter -

>db.counters.insert({_id:"productid",sequence_value:0})

Membuat Fungsi Javascript

Sekarang, kita akan membuat sebuah fungsi getNextSequenceValueyang akan mengambil nama urutan sebagai masukannya, menambah nomor urutan dengan 1 dan mengembalikan nomor urutan yang diperbarui. Dalam kasus kami, nama urutannya adalahproductid.

>function getNextSequenceValue(sequenceName){

   var sequenceDocument = db.counters.findAndModify({
      query:{_id: sequenceName },
      update: {$inc:{sequence_value:1}},
      new:true
   });
	
   return sequenceDocument.sequence_value;
}

Menggunakan Fungsi Javascript

Kita sekarang akan menggunakan fungsi getNextSequenceValue saat membuat dokumen baru dan menetapkan nilai urutan yang dikembalikan sebagai bidang _id dokumen.

Masukkan dua dokumen contoh menggunakan kode berikut -

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category":"mobiles"
})

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Samsung S3",
   "category":"mobiles"
})

Seperti yang Anda lihat, kami telah menggunakan fungsi getNextSequenceValue untuk menyetel nilai bidang _id.

Untuk memverifikasi fungsionalitas, mari kita ambil dokumen menggunakan perintah find -

>db.products.find()

Kueri di atas mengembalikan dokumen berikut yang memiliki bidang _id bertambah otomatis -

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}

{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }