Cara menggunakan mongodb reference example

Sebagai pegiat IT mungkin kita sudah mengenal atau setidaknya mendengar istilah MySQL. Yaps, Sebuah database relasional populer yang mengusung konsep relasi tradisonal (RDBMS/SQL). Nah, selain RDBMS/SQL juga ada konsep baru yaitu NoSQL. NoSQL merupakan konsep penyimpanan database dinamis yang tidak terikat pada relasi-relasi tabel yang kaku seperti RDBMS. Selain lebih scalable, NoSQL juga memiliki performa pengaksesan yang lebih cepat. Hal-hal itulah yang membuat NoSQL menjadi semakin populer beberapa tahun belakangan.

Salah satu jenis NoSQL yang banyak digunakan dan bersumber terbuka yaitu MongoDB. Dengan sistem penyimpanan dalam format dokumen Binary JSON (BSON) membuat MongoDB sangat cocok untuk dipasangkan dengan Node.js.

Akan menjadi tantangan yang menarik, jika kita selama ini terbiasa dengan konsep SQL dan ingin memahami konsep NoSQL pada MongoDB. Dibutuhkan cara pandang baru, mengingat dua konsep ini memiliki cara berbeda dalam merepresentasikan data.

Mapping Tabel, Kolom dan Baris

Jika pada RDBMS kita mengenal tabel, maka di mongoDB ada istilah collection. Di dalam collection ada bentuk dokumen-dokumen yang sepadan dengan baris pada tabel. Dan nama-nama kolom pada tabel bisa dijumpai sebagai field di MongoDB.

https://cdn.tutsplus.com/net/uploads/2013/11/Figure-6-Mapping-Chart.png

Untuk lebih jelasnya mari kita lihat bentuk perubahan bentuk data dari SQL ke NoSQL.

Bentuk data di MySQL

Bentuk data di MongoDB

Dynamic Schema

Yaps, MongoDB memungkinkan kita untuk membuat satu collection yang memiliki struktur yang berbeda antar dokumen. Perbedaan disini bisa terjadi pada nama field, tipe data, maupun jumlah field yang ada (unstructured data). Tentu saja konsep ini berbeda dengan konsep RDBMS yang mengharuskan kita mendefinisikan struktur dan relasi terlebih dahulu, sehingga struktur tiap baris dalam tabel akan sama (structured data).

Untuk lebih jelasnya bisa dilihat contoh pada dua bentuk dokumen pada satu collection dibawah ini.

Struktur dokumen yang berbeda dalam satu collection

Dari gambar diatas bisa dilihat bahwa pada dokumen pertama terdapat field gol_darah yang tidak ada pada dokumen kedua, begitu juga dengan field pekerjaan yang tidak ditemukan pada dokumen pertama. Bayangkan saja jika data ini disimpan pada RDBMS, akan membutuhkan banyak kolom untuk menampung data yang belum tentu diisi semua (tidak efisien).

Kita mengenal bentuk relasi pada RDBMS menggunakan primary dan foreign key yang terhubung secara langsung. Sedangkan di MongoDB ada dua pendekatan untuk membentuk relasi yaitu Referenced dan Embedded Document.

Referenced Document

Di dalam Referenced Document, satu collection akan menyimpan _id dari collection lainnya pada sebuah field. Pada contoh gambar dibawah, terlihat collection pemesanan menyimpan field id_pelanggan yang merupakan _id dari collection pelanggan. Dalam cara ini _id yang disimpan tidak berhubungan secara langsung dengan collection pelanggan. Kita bisa menginputkan id_pelanggan dalam collection pemesanan walaupun id_pelanggan tidak ada di pekerjaan2. MongoDB tidak akan menampilkn pesan error apapun.

Embedded Document

Daripada kita menggunakan banyak collection terpisah yang berelasi, kita bisa menyisipkan data-data tersebut di dalam satu dokumen. Misalnya saja seperti gambar dibawah, pemesanan bisa disisipkan pada dokumen pekerjaan2. Jika tidak, kita juga bisa menyisipkan pekerjaan2 ke dalam pemesanan. Kita bisa banyak berkreasi membentuk struktur yang kita inginkan, namun tentu harus disesusaikan dengan kebutuhan aplikasi kita.

Pendekatan mana yang dipilih?

Tergantung pada banyak kondisi dan kebutuhan. Jika data yang kita sisipkan diprediksi akan tumbuh menjadi besar maka lebih baik untuk menggunakan Referenced Document, seperti data pemesanan diatas. Embedded document digunakan jika data yang disisipkan tidak berpotensi untuk menjadi besar. Perhatikan juga ukuran dari dokumen, karena MongoDB tidak mengijinkan sebuah dokumen berukuran lebih dari dan kedalaman dari Embedded Document juga tidak bisa lebih dari 100.

Tambahan

Salah satu aplikasi client cukup membantu mengelola data di MongoDB yaitu Robomongo. Selain bersumber terbuka juga mendukung di sistem operasi GNU/Linux, Mac, dan Windows. Dan jika membutuhkan layanan hosting MongoDB, kita bisa menggunakan layanan di MLab. Tersedia kapasitas 500 MB gratis, lumayan bisa digunakan untuk belajar atau untuk pengembangan aplikasi kita.

Mongoose adalah sebuah framework JavaScript yang umumnya digunakan pada aplikasi Node.js dengan database MongoDB. Pada artikel ini, Saya akan memperkenalkan kepada Anda tentang Mongoose dan MongoDB, dan yang lebih penting dimana teknologi ini sesuai dengan aplikasi Anda.

Apa itu MongoDB?

Mari memulai dengan MongoDB. MongoDB adalah sebuah database yang menyimpan data Anda sebagai dokumen. Kebanyakan dokumen ini mirip seperti struktur JSON:

1
{
2
  firstName: "Jamie",
3
  lastName: "Munro"
4
}

Sebuah dokumen kemudian diletakan dalam koleksi. Sebagai contoh, contoh dokumen diatas mendefinisikan sebuah obyek 

}
55. Obyek 
}
55 ini kemudian akan secara khusus menjadi bagian dari sebuah koleksi yang disebut 
}
57.

Salah satu dari faktor penentu MongoDB adalah fleksibilitasnya dalam masalah struktur. Meskipun pada contoh pertama, obyek 

}
55 berisikan sebuah properti 
}
59 dan 
}
60, properti ini tidak dibutuhkan di setiap dokumen 
}
55 yang merupakan bagian dari
}
57 collection. Inilah yang membuat MongoDB sangat berbeda dari database SQL seperti MySQL atau Microsoft SQL Server yang membutuhkan skema database yang sudah terdefinisikan pada setiap obyek yang disimpan.

Kemampuan untuk membuat obyek dinamis yang disimpan sebagai dokumen pada database adalah tempat dimana Mongoose bekerja.

Apa itu Mongoose?

Mongoose adalah sebuah Object Document Mapper (ODM). Ini berarti Mongoose mengizinkan Anda untuk mendefinisikan obyek dengan skema yang benar-benar diketik yang dipetakan ke sebuah dokumen MongoDB.

Mongoose menyediakan jumlah fungsionalitas yang luar biasa yang berkaitan dengan pembuatan dan pengerjaan skema. Mongoose saat ini memiliki delapan tipe skema dimana propertinya disimpan seperti saat berada di MongoDB. Diantaranya:

  1. String
  2. Number
  3. Date
  4. Buffer
  5. Boolean
  6. Mixed
  7. ObjectId
  8. Array

Setiap tipe data memungkinkan Anda untuk menentukan:

  • sebuah nilai default
  • sebuah fungsi validasi custom
  • menunjukan field yang dibutuhkan
  • fungsi get yang memungkinkan Anda untuk memanipulasi data sebelum dikembalikan sebagai obyek
  • sebuah set fungsi yang memungkinkan Anda untuk memanipulasi data sebelum disimpan ke database
  • membuat indeks yang memungkinkan data agar ditarik secara lebih cepat

Selanjutnya untuk opsi umum ini, tipe data tertentu memungkinkan Anda untuk menyesuaikan lebih lanjut bagaimana data disimpan dan diambil dari database. Sebagai contoh, sebuah tipe data 

}
63 juga memungkinkan Anda untuk menentukan pilihan tambahan sebagai berikut:

  • mengubah menjadi huruf kecil
  • mengubah menjadi huruf besar
  • memangkas data sebelum disimpan
  • regular-expression yang dapat membatasi data yang diizinkan untuk disimpan selama dalam proses validasi
  • sebuah enum yang dapat menentukan daftar string yang valid

Properti 

}
64 dan 
}
65 keduanya mendukung penentuan nilai minimal dan maksimal yang diizinkan untuk field tersebut.

Sebagian besar dari delapan jenis data yang diizinkan seharusnya cukup familiar untuk Anda. Namun, ada beberapa pengecualian yang mungkin menjadi pengecualian bagi Anda, seperti 

}
66, 
}
67, 
}
68, dan 
}
69.

Tipe data 

}
66 memungkinkan Anda untuk menyipan data biner. Contoh yang umum untuk data biner seperti gambar atau file encodem seperti dokumen PDF.

Tipe data 

}
67 mengubah properti menjadi field "dapat menjadi apa saja". Field ini menyerupai berapa banyak pengembang yang menggunakan MongoDB karena tidak ada struktur yang jelas. Berhati-hatilah menggunakan tipe data ini karena tipe ini kehilangan banyak fitur hebat yang disediakan oleh Mongoose, seperti validasi data dan pendeteksi perubahan entitas untuk dapat mengetahui secara otomatis dalam memperbarui properti saat menyimpan.

Tipe data 

}
68 umumnya menentukan sebuah tautan ke dokumen yang lain di dalam database Anda. Sebagai contoh, jika anda memiliki sebuah koleksi buku dan penulis, dokumen buku kemungkinan berisi sebuah properti 
}
68 yang menunjuk ke penulis tertentu dari dokumen.

Tipe data 

}
69 memungkinkan anda untuk menyimpan array yang seperti JavaScript. Dengan sebuah tipe data Array, anda dapat melakukan operasi array Javascript yang umum, seperti push, pop, shift, slice, dll.

Rekap Singkat

Sebelum melanjutkan dan menghasilkan beberapa kode, Saya ingin mengulang apa yang baru saja kita pelajari. MongoDB adalah database yang memungkinkan Anda menyimpan dokumen dengan struktur dinamis. Dokumen-dokumen ini disimpan di dalam koleksi.

Mongoose adalah pustaka JavaScript yang memungkinkan Anda menentukan skema dengan data yang strongly-typed.  Setelah skema didefinisikan, Mongoose memungkinkan Anda membuat Model berdasarkan skema tertentu. Model Mongoose kemudian dipetakan ke Dokumen MongoDB melalui definisi skema Model.

Setelah Anda menentukan skema dan model Anda, Mongoose berisi banyak fungsi berbeda yang memungkinkan Anda untuk memvalidasi, menyimpan, menghapus, dan men-query data Anda menggunakan fungsi MongoDB yang umum. Saya akan membicarakan hal ini lebih dengan contoh kode yang konkrit untuk diikuti.

Menginstall MongoDB

Sebelum kita dapat memulai membuat skema dan model Mongoose kita, MongoDB harus terinstal dan terkonfigurasi. Saya menyarankan untuk mengunjungi .  Ada beberapa pilihan berbeda yang tersedia untuk menginstall. Saya telah terhubung ke Server Community. Hal ini memungkinkan Anda menginstal versi tertentu ke sistem operasi Anda. MongoDB juga menawarkan Server Enterprise Server dan instalasi bantuan cloud. Karena seluruh buku bisa ditulis saat menginstal, menyetel, dan memantau MongoDB, saya akan tetap dengan Server Community.

Setelah anda selesai mendownload dna menginstall MongoDB untuk sistem operasi pilihan anda, Anda harus memulai database. Daripada membuat wheel baru, Saya menyarankan anda mengunjungi dokumentasi MongoDB's tentang bagaimana menginstall MongoDB Edisi Community.

Saya akan menunggu di sini saat Anda mengkonfigurasi MongoDB. Bila sudah siap, kita bisa melanjutkan untuk menyiapkan Mongoose untuk terhubung ke database MongoDB yang baru diinstal.

Menyiapkan Mongoose

Mongoose adalah framework JavaScript, dan saya akan menggunakannya dalam aplikasi Node.js. Jika Anda sudah menginstal Node.js, Anda dapat melanjutkan ke langkah berikutnya. Jika Anda tidak menginstal Node.js, saya sarankan Anda memulai dengan mengunjungi Halaman Download Node.js dan pilih installer untuk sistem operasi Anda.

Setelah Node.js telah disetel dan siap digunakan, Saya akan membuat aplikasi baru dan kemudian menginstal Mongoose NPM Package.

Dengan command prompt yang disetel ke aplikasi yang Anda inginkan untuk diinstall, Anda dapat menjalankan perintah berikut:

1
mkdir mongoose_basics
2
{
1
3
{
3

Untuk inisialisasi aplikasi saya, saya biarkan semuanya ke nilai default. Sekarang saya akan menginstal paket mongoose sebagai berikut:

1
{
5

Dengan semua prasyarat yang dikonfigurasi, mari kita hubungkan ke database MongoDB. Saya telah menempatkan kode berikut di dalam file index.js karena saya memilihnya sebagai titik awal untuk aplikasi saya:

1
{
7
2
3
2
0

Baris pertama termasuk pustaka 

}
75. Kemudian, Saya membuka sebuah koneksi ke database yang saya sebut 
}
76 menggunakan fungsi 
}
77.

Fungsi 

}
77 menerima dua pilihan parameter lainnya. Parameter kedua adalah sebuah pilihan obyek dimana kamu dapan mendefinisikan hal-hal seperti username dan password jika diperlukan. Parameter yang ketiga, yang dapa juga menjadi parameter kedua jika anda tida mempunyai pilihan, adalah fungsi callback setelah mencoba untuk menghubungkan. Fungsi callback dapat digunakan dalam satu dari dua cara:

1
2
2
2
3
2
5
4
2
7
2
8
2
9
  firstName: "Jamie",
0
  firstName: "Jamie",
1
  firstName: "Jamie",
2
  firstName: "Jamie",
3
  firstName: "Jamie",
4
  firstName: "Jamie",
5
  firstName: "Jamie",
6
  firstName: "Jamie",
7
  firstName: "Jamie",
8
  firstName: "Jamie",
9
3
0
3
1
3
2
3
3

Untuk menghindari pengantar potensial pada JavaScript Promises, Saya akan menggunakan cara pertama. Di bawah ini adalah file index.js yang telah diupdate:

1
{
7
2
3
3
8
4
2
7
  lastName: "Munro"
1
2
9
  firstName: "Jamie",
0
  lastName: "Munro"
4
  firstName: "Jamie",
2
  firstName: "Jamie",
3
2
8

Jika error terjadi saat menghubungkan ke database, exception akan dilempar dan proses selanjutnya akan dihentikan. Saat tidak terjadi error, Saya akan mengirim pesan sudah login ke console.

Mongoose sekarang telah disetel dan dihubungkan ke database yang disebut 

}
76. Koneksi MongoDB saya tidak menggunakan username, password, atau port custom. Jika anda ingin menyetel pilihan ini atau pilihan yang lain selama menghubungkan, Saya menyarankan anda mengunjungi Mongoose Documentation on connecting. Dokumentasi ini menyediakan penjelasan terperinci dari berbagai pilihan yang tersedia termasuk bagaimana membuat multiple connection, connection pooling, replika, dll.

Setelah koneksi telah sukses, mari berpindah ke pendefinisian Skema Mongoose.

Mendefinisikan Skema Mongoose

Saat pendahuluan, Saya menunjukan sebuah obyek 

}
55 yang berisi dua properti: 
}
59 dan 
}
60. Pada contoh berikut, saya telah menerjemahkan dokumen tersebut ke dalam Skema Mongoose:

1
  lastName: "Munro"
9
2
4
1
3
4
3
4
2
8

Ini adalah Skema yang sangat mendasar yang hanya berisi dua properti tanpa ada attribut yang terkait dengannya. Mari memperluas contoh ini dengan mengkonversi properti first dan last name menjadi obyek child dari properti 

}
83.  Properti 
}
83 akan meliputi kedua dari first dan last name. Saya juga akan menambahkan sebuah properti 
}
85 yang bertipe 
}
65.

1
  lastName: "Munro"
9
2
4
9
3
}
1
4
}
3
2
7
}
5
2
9
}
7
  firstName: "Jamie",
0
2
8

Seperti yang anda lihat, Mongoose memungkinkan saya untuk membuat skema yang sangat fleksibel dengan banyak kombinasi memungkinkan yang berbeda tentang bagaimana saya bisa mengorganisir data Saya.

Pada contoh selanjutnya, Saya akan membuat dua skema baru yang akan mendemonstrasikan bagaimana cara membuat relasi ke skema yang lain: 

}
87 dan 
}
88. Skema 
}
88 berisi sebuah referensi ke skema 
}
87.

1
1
1
2
1
3
3
4
9
4
1
7
2
7
1
9
2
9
mkdir mongoose_basics
1
  firstName: "Jamie",
0
mkdir mongoose_basics
3
  firstName: "Jamie",
2
mkdir mongoose_basics
5
  firstName: "Jamie",
3
mkdir mongoose_basics
7
  firstName: "Jamie",
5
mkdir mongoose_basics
9
  firstName: "Jamie",
6
{
01
  firstName: "Jamie",
8
{
03
  firstName: "Jamie",
9
{
05
3
1
{
07
3
2
{
09
{
10
2
8

Contoh diatas adalah skema 

}
87 yang diperluas berdasarkan konsep dari skema 
}
55 yang saya ciptakan pada contoh sebelumnya. Untuk menghubungkan antara Author dan Book, Properti pertama dari skema 
}
87 adalah sebuah properti 
}
94 yang merupakan tipe skema 
}
68. 
}
94 adalah sintaks yang umum untuk membuat primary key pada Mongoose dan MongoDB. Kemudian, seperti skema 
}
55, Saya telah mendefinisikan sebuah properti 
}
83 yang berisikan first dan last name author.

Perluasan dari skema 

}
55 schema, 
}
87 berisi beberapa tipe skema 
}
63 yang lain. Saya juda sudah menambahkan sebuah tipe skema 
}
66 yang dapat menaruh gambar profil pengarangnya.  Properti terakhir memegang tanggal pembuatan penulis; Namun, Anda mungkin memperhatikannya dibuat sedikit berbeda karena telah ditetapkan nilai default "now". Ketika seorang penulis berada pada database, properti ini akan diset ke tanggal / waktu sekarang.

Untuk melengkapi contoh skema, mari membuat skema 

}
88 schema yang berisi sebuah referesi ke penulis menggunakan tipe skema 
}
68:

1
{
13
2
1
3
3
{
17
4
{
19
2
7
{
21
2
9
{
23
  firstName: "Jamie",
0
{
25
  firstName: "Jamie",
2
{
27
  firstName: "Jamie",
3
{
29
  firstName: "Jamie",
5
}
5
  firstName: "Jamie",
6
{
33
  firstName: "Jamie",
8
{
35
  firstName: "Jamie",
9
{
37
3
1
{
39
3
2
{
41
{
10
{
43
{
44
{
45
{
46
{
47
{
48
{
49
{
50
{
51
{
52
{
53
{
54
{
03
{
56
{
05
{
58
{
07
{
60
{
09
{
62
2
8

Skema 

}
88 berisi beberapa properti dari tipe 
}
63. Seperti disebutkan diatas, skema itu berisikan sebuah referensi ke skema 
}
87. Untuk mendemonstrasikan definisi skema yang powerful secara lebih jauh, skema 
}
88 juga berisikan sebuah 
}
69 dari 
1
10. Setiap rating terdiri atas sebuah 
1
11, 
1
12, 
1
13, dan properti date 
}
85.

Mongoose memungkinkan anda kelenturan dalam membuat skema dengan drferesi ke skema yang lain atau, sebagaimana contoh diatas dengan properti 

1
10, hal ini memungkinkan anda untuk membuat sebuah 
}
69 dari properti child yang dapat terisi dalam skema relasi (seperti book ke author) atau dalam barisan sebagaimana contoh diatas (dengan book untuk sebuah rating 
}
69).

Membuat dan Menyimpan Model Mongoose

Setelah skema 

}
87 dan 
}
88 mendemonstrasikan kelenturan skema Mongoose, Saya akan lanjut menggunakan skema tersebut dan memperoleh sebuah model 
1
20 dan 
1
21 darinya.

1
{
65
2
3
{
68

Sebuah Model Mongoose, saat disimpan, membuat sebuah dokumen di MongoDB dengan properti yang didefinisikan oleh skema asal.

Untuk menunjukan pembuatan dan penyimpanan sebuah obyek, pada contoh yang selanjutnya, Saya akan membuat beberapa obyek: Sebuah Model 

1
20 dan beberapa model 
1
21. Setelah dibuat, obyek ini akan disimpan ke MongoDB menggunakan metode 
1
24 dari Model.

1
{
70
2
{
72
3
4
9
4
{
76
2
7
{
78
2
9
}
5
  firstName: "Jamie",
0
{
82
  firstName: "Jamie",
2
{
84
  firstName: "Jamie",
3
{
86
  firstName: "Jamie",
5
{
88
  firstName: "Jamie",
6
  firstName: "Jamie",
8
{
91
  firstName: "Jamie",
9
{
93
3
1
{
95
3
2
{
97
{
10
{
95
{
44
2
01
{
46
2
03
{
48
2
05
{
50
2
07
{
52
2
09
{
54
2
11
{
56
2
13
{
58
2
15
{
60
{
95
{
62
2
19
2
20
2
21
2
22
{
95
2
24
2
25
2
26
2
27
2
28
{
95
2
30
2
31
2
32
2
03
2
34
2
35
2
36
2
37
2
38
2
15
2
40
{
95
2
42
2
43
2
44
2
21
2
46
{
95
2
48
2
25
2
50
2
27
2
52
2
8

Pada contoh di atas, saya tanpa malu-malu menghubungkan referensi ke dua buku terbaru saya. Contohnya dimulai dengan membuat dan menyimpan 

1
25 yang dibuat dari Model 
1
20.  Di dalam fungsi 
1
24 dari 
1
25, jika terjadi kesalahan, aplikasi akan mengeluarkan exception. Bila save berhasil, di dalam fungsi 
1
24, dua objek buku dibuat dan disimpan. Serupa dengan 
1
25, jika terjadi kesalahan saat menyimpan, kesalahan akan muncul; Jika tidak, pesan sukses dikeluarkan di console.

Untuk membuat referensi ke Author, obyek buku mereferesi kedua skema 

}
87 primary key
}
94 dalam properti 
}
87 dari skema 
}
88.

Validasi Data Sebelum Disimpan

Umumnya untuk data yang akan menghasilkan model untuk diisi oleh formulir pada halaman web. Karena itu, ada baiknya memvalidasi data ini sebelum menyimpan Model ke MongoDB.

Pada contoh selanjutnya, Saya telah menguppdate skema author sebelumnya untuk menambahkan validasi dari properti berikut: 

}
59, 
1
36, 
1
37, dan 
1
38.

1
1
1
2
1
3
3
4
9
4
2
61
2
7
2
63
2
9
2
65
  firstName: "Jamie",
0
2
67
  firstName: "Jamie",
2
2
69
  firstName: "Jamie",
3
mkdir mongoose_basics
1
  firstName: "Jamie",
5
2
73
  firstName: "Jamie",
6
2
75
  firstName: "Jamie",
8
2
77
  firstName: "Jamie",
9
2
79
3
1
2
81
3
2
2
83
{
10
2
85
{
44
2
87
{
46
2
89
{
48
mkdir mongoose_basics
1
{
50
2
93
{
52
2
77
{
54
2
79
{
56
2
81
{
58
  firstName: "Jamie",
01
{
60
2
85
{
62
  firstName: "Jamie",
05
2
20
2
89
2
22
mkdir mongoose_basics
1
2
24
  firstName: "Jamie",
11
2
26
2
77
2
28
2
79
2
30
2
81
2
32
  firstName: "Jamie",
19
2
34
2
85
2
36
  firstName: "Jamie",
23
2
38
2
89
2
40
mkdir mongoose_basics
1
2
42
  firstName: "Jamie",
29
2
44
  firstName: "Jamie",
31
2
46
  firstName: "Jamie",
33
2
48
  firstName: "Jamie",
35
2
50
  firstName: "Jamie",
37
2
52
2
8

Properti 

}
59 sudah diberikan attribut dengan properti 
1
40. Sekarang saat saya amemanggil fungsi 
1
24, Mongoose akan mengembalikan sebuah pesan eror yang mengindikasikan properti 
}
59 dibutuhkan. Saya memilih tidak menggunakan properti 
}
60 required dalam kasus Cher atau Madonna akan menjadi author di database Saya.

Properti 

1
36, 
1
37, dan 
1
46semuanya memiliki validator kustom yang sangat mirip dengan yang diterapkan pada mereka. Mereka masing-masing memastikan bahwa nilai dimulai dengan nama domain jejaring sosial masing-masing.  Field ini tidak diperlukan, jadi validator hanya akan diterapkan bila data disupply untuk properti tersebut.

Mencari dan Mengupdate Data

Pengantar Mongoose tidak akan lengkap tanpa contoh mencari untuk record dan mengupdate satu atau lebih properti pada objek tersebut.

Mongoose menyediakan beberapa fungsi berbeda untuk menemukan data untuk Model tertentu. Fungsi tersebut adalah 

1
47, 
1
48, dan 
1
49.

Fungsi 

1
47 dan 
1
48 keduanya menerima objek sebagai masukan yang memungkinkan pencarian kompleks, sedangkan 
1
49 hanya menerima satu nilai dengan fungsi callback (contoh akan segera disertakan). Dalam contoh selanjutnya, saya akan menunjukkan bagaimana menemukan semua buku yang berisi string "mvc" di judul mereka.

1
  firstName: "Jamie",
41
2
  firstName: "Jamie",
43
3
  firstName: "Jamie",
45
4
{
93
2
7
{
95
2
9
  firstName: "Jamie",
51
  firstName: "Jamie",
0
2
8

Di dalam fungsi 

1
47, Saya mencari string dengan case insensitif "mvc" pada properti 
1
54. Hal ini dilakukan dengan menggunakan sintaks yang sama untuk mencari string dengan JavaScript.

Fungsi find call juga dirantai ke metode query lainnya, seperti 

1
55, 
1
56, 
1
57, 
1
58, 
1
59, 
1
60, dll.

Mari kita memperluas contoh sebelumnya untuk membatasi hasil kita ke lima buku pertama dan mengurutkan pada tanggal yang tercipta secara menurun. Fungsi ini akan mengembalikan lima buku terbaru yang berisi "mvc" di judulnya.

1
  firstName: "Jamie",
41
2
  firstName: "Jamie",
43
3
  firstName: "Jamie",
59
4
  firstName: "Jamie",
61
2
7
  firstName: "Jamie",
63
2
9
{
93
  firstName: "Jamie",
0
{
95
  firstName: "Jamie",
2
  firstName: "Jamie",
51
  firstName: "Jamie",
3
2
8

Setelah menerapkan fungsi 

1
47, urutan fungsi lainnya tidak penting karena semua fungsi yang dirantai dikompilasi menjadi satu query tunggal dan tidak dieksekusi sampai fungsi 
1
62 dipanggil.

Seperti yang saya sebutkan sebelumnya, 

1
49 dijalankan sedikit berbeda. Fungsi ini segera dijalankan dan menerima fungsi callback, ketimbang membiarkan serangkaian fungsi. Dalam contoh berikut ini, saya melakukan query author tertentu dengan 
}
94 mereka.

1
  firstName: "Jamie",
73
2
  firstName: "Jamie",
75
3
  firstName: "Jamie",
77
4
  firstName: "Jamie",
79
2
7
2
8

}
94 pada kasus Anda mungkin sedikit berbeda. Saya menyalin 
}
94 ini dari sebuah 
1
67 sebelumnya saat menemukan sebuah daftar book dengan "mvc" pada judulnya.

Begitu sebuah objek telah dikembalikan, Anda dapat memodifikasi propertinya untuk mengupdatenya. Setelah Anda membuat perubahan yang diperlukan, Anda memanggil metode 

1
24, seperti saat Anda membuat obyek. Dalam contoh berikut, saya akan memperluas contoh 
1
69 dan update properti 
1
38 pada author.

1
  firstName: "Jamie",
73
2
{
93
3
{
95
4
  firstName: "Jamie",
89
2
7
{
95
2
9
  firstName: "Jamie",
93
  firstName: "Jamie",
0
2
21
  firstName: "Jamie",
2
  firstName: "Jamie",
97
  firstName: "Jamie",
3
  firstName: "Jamie",
99
  firstName: "Jamie",
5
2
27
  firstName: "Jamie",
6
2
8

Setelah author berhasil diambil, properti 

1
38 telah disetel dan fungsi 
1
24 telah dipanggil.  Mongoose mampu mendeteksi bahwa properti 
1
38 telah diubah, dan akan mengirimkan pernyataan update ke MongoDB hanya pada properti yang telah dimodifikasi. Jika terjadi kesalahan saat menyimpan, exception akan dilempar dan akan menghentikan aplikasi. Saat sukses, pesan sukses masuk ke konsol.

Mongoose juga menawarkan dua fungsi tambahan yang membuat pencarian objek dan menyimpannya dalam satu langkah dengan fungsi yang diberi nama dengan tepat: 

1
74 dan 
1
75. Mari update contoh sebelumnya untuk menggunakan 
1
74.

1
3
05
2
3
07
3
3
09
4
3
11
2
7
{
95
2
9
3
15
  firstName: "Jamie",
0
2
8

Pada contoh sebelumnya, properti yang akan diperbarui disupply sebagai objek ke parameter kedua dari fungsi 

1
74. Fungsi callback sekarang menjadi parameter ketiga. Saat update berhasil, objek 
}
87 kembali berisi informasi terbaru. Obyek ini masuk ke konsol untuk melihat properti penulis yang diperbarui.

Contoh Kode Terakhir

Sepanjang artikel ini, saya memberikan potongan kecil kode untuk mengidentifikasi tindakan yang sangat spesifik, seperti membuat skema, membuat model, dll. Mari kita menggabungkan semuanya dalam contoh lengkap.

Pertama, Saya membuat dua file tambahan: 

1
79 dan 
1
80. File ini berisikan definisi skema dan kreasi model masing-masing. baris yang terakhir dari kode berikut meembuat model tersedia untuk digunakan pada file 
1
81.

Mari memulai dengan file author.js:

1
{
7
2
3
1
1
4
1
3
2
7
4
9
2
9
2
61
  firstName: "Jamie",
0
2
63
  firstName: "Jamie",
2
2
65
  firstName: "Jamie",
3
2
67
  firstName: "Jamie",
5
2
69
  firstName: "Jamie",
6
mkdir mongoose_basics
1
  firstName: "Jamie",
8
2
73
  firstName: "Jamie",
9
2
75
3
1
2
77
3
2
2
79
{
10
2
81
{
44
2
83
{
46
2
85
{
48
2
87
{
50
2
89
{
52
mkdir mongoose_basics
1
{
54
2
93
{
56
2
77
{
58
2
79
{
60
2
81
{
62
  firstName: "Jamie",
01
2
20
2
85
2
22
  firstName: "Jamie",
05
2
24
2
89
2
26
mkdir mongoose_basics
1
2
28
  firstName: "Jamie",
11
2
30
2
77
2
32
2
79
2
34
2
81
2
36
  firstName: "Jamie",
19
2
38
2
85
2
40
  firstName: "Jamie",
23
2
42
2
89
2
44
mkdir mongoose_basics
1
2
46
  firstName: "Jamie",
29
2
48
  firstName: "Jamie",
31
2
50
  firstName: "Jamie",
33
2
52
  firstName: "Jamie",
35
  lastName: "Munro"
03
  firstName: "Jamie",
37
  lastName: "Munro"
05
2
8
  lastName: "Munro"
07
  lastName: "Munro"
08
{
65
  lastName: "Munro"
10
  lastName: "Munro"
11
  lastName: "Munro"
12

Selanjutnya datangnya file 

1
80:

1
{
7
2
3
{
13
4
1
3
2
7
{
17
2
9
  lastName: "Munro"
23
  firstName: "Jamie",
0
  lastName: "Munro"
25
  firstName: "Jamie",
2
  lastName: "Munro"
27
  firstName: "Jamie",
3
  lastName: "Munro"
29
  firstName: "Jamie",
5
  lastName: "Munro"
31
  firstName: "Jamie",
6
  lastName: "Munro"
33
  firstName: "Jamie",
8
mkdir mongoose_basics
1
  firstName: "Jamie",
9
  lastName: "Munro"
37
3
1
  lastName: "Munro"
39
3
2
  lastName: "Munro"
41
{
10
  lastName: "Munro"
43
{
44
  lastName: "Munro"
45
{
46
  lastName: "Munro"
47
{
48
  lastName: "Munro"
49
{
50
  lastName: "Munro"
51
{
52
  lastName: "Munro"
53
{
54
2
89
{
56
  lastName: "Munro"
57
{
58
  firstName: "Jamie",
31
{
60
  firstName: "Jamie",
33
{
62
  firstName: "Jamie",
35
2
20
  firstName: "Jamie",
37
2
22
2
8
2
24
2
26
{
68
2
28
2
30
  lastName: "Munro"
73

Dan Terakhir, file 

1
81 yang telah diupdate:

1
{
7
2
3
  lastName: "Munro"
78
4
  lastName: "Munro"
80
2
7
2
9
3
8
  firstName: "Jamie",
0
  firstName: "Jamie",
75
  firstName: "Jamie",
2
{
95
  firstName: "Jamie",
3
  lastName: "Munro"
89
  firstName: "Jamie",
5
{
95
  firstName: "Jamie",
6
  lastName: "Munro"
93
  firstName: "Jamie",
8
  lastName: "Munro"
95
  firstName: "Jamie",
9
  lastName: "Munro"
97
3
1
  lastName: "Munro"
99
3
2
4
01
{
10
2
67
{
44
4
05
{
46
4
07
{
48
4
09
{
50
2
27
{
52
{
54
4
14
{
56
2
21
{
58
  firstName: "Jamie",
97
{
60
4
20
{
62
  firstName: "Jamie",
97
2
20
4
24
2
22
4
26
2
24
4
28
2
26
4
30
2
28
4
32
2
30
4
34
2
32
4
36
2
34
4
38
2
36
  firstName: "Jamie",
97
2
38
4
42
2
40
4
44
2
42
  firstName: "Jamie",
97
2
44
4
48
2
46
4
38
2
48
  firstName: "Jamie",
97
2
50
4
54
2
52
4
26
  lastName: "Munro"
03
4
58
  lastName: "Munro"
05
4
60
  lastName: "Munro"
07
4
38
  lastName: "Munro"
08
  firstName: "Jamie",
97
  lastName: "Munro"
10
4
66
  lastName: "Munro"
11
4
44
4
69
  firstName: "Jamie",
97
4
71
4
48
4
73
4
38
4
75
2
27
4
77
2
8

Pada contoh diatas, semua aksi Mongoose berisi di dalamnya fungsi 

}
77. File 
}
87 dan 
}
88 termasuk dengan fungsi 
1
87 setelah memasukan pustaka 
}
75 library.

Dengan berjalannya MongoDB, anda sekara bisa menjalankan aplikasi Node.js yang lengkap dengan perintah sebagai berikut:

1
4
80

Setelah saya menyimpan beberapa data saya ke database saya, Saya perbarui file 

1
81 file fungsi pencari sebagai berikut:

1
{
7
2
3
  lastName: "Munro"
78
4
  lastName: "Munro"
80
2
7
2
9
3
8
  firstName: "Jamie",
0
  firstName: "Jamie",
75
  firstName: "Jamie",
2
{
95
  firstName: "Jamie",
3
  lastName: "Munro"
89
  firstName: "Jamie",
5
{
95
  firstName: "Jamie",
6
}
00
  firstName: "Jamie",
8
}
02
  firstName: "Jamie",
9
}
04
3
1
}
06
3
2
}
08
{
10
2
21
{
44
  firstName: "Jamie",
97
{
46
}
14
{
48
2
27
{
50
{
95
{
52
}
20
{
54
2
21
{
56
  firstName: "Jamie",
97
{
58
}
26
{
60
  firstName: "Jamie",
97
{
62
}
30
2
20
4
44
2
22
}
34
2
24
}
36
2
26
4
38
2
28
2
27
2
30
{
95
2
32
}
44
2
34
2
21
2
36
  firstName: "Jamie",
97
2
38
}
50
2
40
2
27
2
42
2
8

Sekali lagi, Anda dapat menjalankan aplikasi dengan perintah: 

1
90.

Kesimpulan

Setelah membaca artikel ini, Anda seharusnya dapat membuat Skema dan Model Mongol yang sangat fleksibel, menerapkan validasi sederhana atau kompleks, membuat dan memperbarui dokumen, dan akhirnya mencari dokumen yang telah dibuat.

Semoga sekarang Anda merasa nyaman menggunakan Mongoose. Jika Anda ingin belajar lebih banyak, saya sarankan untuk meninjau ulangĀ Panduan Mongoose yang menyelidiki topik yang lebih maju seperti populasi, middleware, janji, dll.