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" }