Logo Zephyrnet

Pengantar MongoDB

Tanggal:

MongoDB adalah database NoSQL lintas platform, open-source, yang digunakan oleh banyak aplikasi web modern berbasis Node untuk menyimpan data.

Dalam tutorial ramah-pemula ini, saya akan mendemonstrasikan cara menginstal Mongo, lalu mulai menggunakannya untuk menyimpan dan meminta data. Saya juga akan melihat bagaimana berinteraksi dengan database Mongo dari dalam program Node, dan juga menyoroti beberapa perbedaan antara Mongo dan database relasional tradisional (seperti MySQL).

Apa itu MongoDB?

MongoDB adalah database berorientasi dokumen. Ini berarti bahwa ia tidak menggunakan tabel dan baris untuk menyimpan datanya, melainkan koleksi seperti JSON dokumen. Dokumen-dokumen ini mendukung bidang tertanam, sehingga data terkait dapat disimpan di dalamnya.

MongoDB juga merupakan database tanpa skema, jadi kita tidak perlu menentukan jumlah atau jenis kolom sebelum memasukkan data kita.

Berikut adalah contoh tampilan dokumen MongoDB:

{ _id: ObjectId(3da252d3902a), type: "Tutorial", title: "An Introduction to MongoDB", author: "Manjunath M", tags: [ "mongodb", "compass", "crud" ], categories: [ { name: "javascript", description: "Tutorialss on client-side and server-side JavaScript programming" }, { name: "databases", description: "Tutorialss on different kinds of databases and their management" }, ], content: "MongoDB is a cross-platform, open-source, NoSQL database..."
}

Seperti yang Anda lihat, dokumen tersebut memiliki sejumlah bidang (type, title dll.), yang menyimpan nilai-nilai ("Tutorial", "Pengantar MongoDB" dll.). Nilai-nilai ini dapat berisi string, angka, array, array sub-dokumen (misalnya, file categories lapangan), koordinat geografis, dan lainnya.

Grafik _id nama bidang dicadangkan untuk digunakan sebagai kunci utama. Nilainya harus unik dalam koleksi, tidak dapat diubah, dan dapat berupa jenis apa pun selain larik.

Tip: bagi mereka yang bertanya-tanya apa arti "JSON-like", secara internal Mongo menggunakan sesuatu yang disebut BSON (kependekan dari Binary JSON). Dalam praktiknya, Anda tidak perlu tahu banyak tentang BSON saat bekerja dengan MongoDB.

Seperti yang Anda duga, a dokumen dalam database NoSQL sesuai dengan a baris dalam database SQL. Sekelompok dokumen bersama-sama dikenal sebagai a koleksi, yang kira-kira sama dengan a tabel dalam database relasional.

Berikut tabel yang merangkum berbagai istilah:

SQL Server MongoDB
Basis Data Basis Data
tabel Koleksi
Baris Dokumen
Kolom Bidang
Indeks Indeks

Jika Anda memulai proyek baru dan tidak yakin apakah akan memilih Mongo atau database relasional seperti MySQL, sekarang mungkin saat yang tepat untuk membaca tutorial kami SQL vs NoSQL: Cara Memilih.

Karena itu, mari lanjutkan dan instal MongoDB.

Menginstal MongoDB

Catatan: jika Anda hanya ingin mengikuti tutorial ini tanpa menginstal perangkat lunak apa pun di PC Anda, ada beberapa layanan online yang dapat Anda gunakan. Taman bermain Mongo, misalnya, adalah kotak pasir sederhana untuk menguji dan berbagi kueri MongoDB secara online.

MongoDB hadir dalam berbagai edisi. Yang kami minati adalah Edisi Komunitas MongoDB.

Halaman beranda proyek memiliki dokumentasi yang sangat baik tentang pemasangan Mongo, dan saya tidak akan mencoba menirunya di sini. Sebaliknya, saya akan menawarkan Anda tautan ke petunjuk untuk masing-masing sistem operasi utama:

Jika Anda menggunakan versi Linux berbasis non-Ubuntu, Anda dapat memeriksanya halaman ini untuk petunjuk pemasangan untuk distro lain. MongoDB juga biasanya tersedia melalui saluran perangkat lunak Linux resmi, tetapi kadang-kadang ini akan menarik versi yang sudah ketinggalan zaman.

Konfigurasi Pasca Instalasi

Setelah Anda menginstal MongoDB untuk sistem Anda, Anda mungkin mengalami kesalahan ini:

dbpath (/data/db) does not exist. Create this directory or give existing directory in --dbpath. See http://dochub.mongodb.org/core/startingandstoppingmongo

Ini berarti Mongo tidak dapat menemukan (atau mengakses) direktori yang digunakannya untuk menyimpan database-nya. Ini cukup mudah untuk diperbaiki:

sudo mkdir -p /data/db
sudo chown -R `id -un` /data/db

Perintah pertama membuat file data/db direktori. Yang kedua mengatur hak akses sehingga Mongo bisa menulis ke direktori itu.

Instal GUI Kompas

Kami akan menggunakan baris perintah dalam tutorial ini, tetapi MongoDB juga menawarkan alat yang disebut Kompas untuk menghubungkan dan mengelola database Anda menggunakan GUI.

Jika Anda menggunakan Windows, Kompas dapat diinstal sebagai bagian dari instalasi Mongo utama (cukup pilih opsi yang sesuai dari wizard). Jika tidak, Anda bisa unduh Kompas untuk OS Anda masing-masing di sini.

Seperti inilah tampilannya:

GUI Kompas DB Mongo

Shell Mongo

Kami dapat menguji instalasi kami dengan membuka shell Mongo. Anda dapat melakukannya dengan membuka jendela terminal dan mengetik mongo.

Catatan: ini mengasumsikan bahwa <mongodb installation dir>/bin ada di jalan Anda. Jika karena alasan apa pun ini bukan masalahnya, ubah ke <mongodb installation dir>/bin direktori dan jalankan kembali perintah.

Jika Anda mendapatkan file Error: couldn't connect to server kesalahan, Anda harus memulai server Mongo (di jendela terminal kedua) dengan perintah mongod.

Setelah Anda berada di shell Mongo, ketik db.version() untuk melihat versi MongoDB yang Anda jalankan. Pada saat penulisan, ini harus menghasilkan 4.2.2.

Harap dicatat bahwa Anda dapat keluar dari shell Mongo dengan menjalankan quit() dan daemon Mongo dengan menekan Ctrl + C setiap saat.

Sekarang mari berkenalan dengan beberapa dasar MongoDB.

Operasi Database Dasar

Masukkan shell Mongo jika Anda belum melakukannya (dengan mengetik mongo ke terminal):

[mj@localhost ~]$ mongo
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("08a624a0-b330-4233-b56b-1d5b15a48fea") }
MongoDB server version: 4.2.2

Mari kita mulai dengan membuat database untuk dikerjakan. Untuk membuat database, MongoDB memiliki file use DATABASE_NAME perintah:

> use exampledb
switched to db exampledb

Untuk menampilkan semua database yang ada, coba show dbs:

> show dbs admin 0.000GB
config 0.000GB
local 0.000GB

Grafik exampledb tidak ada dalam daftar karena kita perlu memasukkan setidaknya satu dokumen ke dalam database. Untuk menyisipkan dokumen, Anda bisa menggunakan db.COLLECTION_NAME.insertOne({"key":"value"}). Inilah contohnya:

> db.users.insertOne({name: "Bob"})
{ "acknowledged" : true, "insertedId" : ObjectId("5a52c53b223039ee9c2daaec")
}

MongoDB secara otomatis membuat file users koleksi dan menyisipkan dokumen dengan pasangan kunci-nilai 'name':'Bob'. ObjectId yang dikembalikan adalah ID dari dokumen yang dimasukkan. MongoDB membuat ObjectId unik untuk setiap dokumen saat pembuatan, dan itu menjadi nilai default dari file _id lapangan.

Sekarang kita bisa melihat database kita:

>show dbs
admin 0.000GB
config 0.000GB
exampledb 0.000GB
local 0.000GB

Demikian pula, Anda dapat mengonfirmasi bahwa koleksi dibuat menggunakan show collections perintah:

> show collections
users

Kami telah membuat database, menambahkan koleksi bernama users dan memasukkan dokumen ke dalamnya. Sekarang mari kita coba jatuhkan. Untuk menjatuhkan database yang sudah ada, gunakan dropDatabase() perintah, seperti yang dicontohkan di bawah ini:

>db.dropDatabase()
{ "dropped" : "exampledb", "ok" : 1 }

show dbs mengonfirmasi bahwa database memang dijatuhkan:

> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

Untuk operasi database lebih lanjut, silakan lihat halaman referensi MongoDB di perintah database.

Manajemen Pengguna

Sekarang Anda mungkin memperhatikan bahwa MongoDB tidak dilengkapi dengan kontrol akses apa pun yang diaktifkan.

Meskipun tidak harus memberikan nama pengguna dan kata sandi bagus untuk pengembangan, ini adalah sesuatu yang harus Anda ubah saat menggunakan Mongo dalam produksi.

Berikut adalah langkah-langkah untuk membuat pengguna database dengan hak baca / tulis penuh:

  • Pastikan Anda telah memulai server Mongo tanpa jenis kontrol akses apa pun (biasanya dengan mengetik mongod).
  • Buka shell dengan mengetik mongo.
  • Dari shell, tambahkan pengguna dengan readWrite peran ke exampledb database. Ini akan meminta Anda memasukkan kata sandi. Jelas, ganti "manjunath" dengan nama pengguna yang Anda inginkan:
    js
    use exampledb
    db.createUser(
    {
    user: "manjunath",
    pwd: passwordPrompt(),
    roles: [ { role: "readWrite" ]
    }
    )
  • Keluar dari cangkang Mongo.
  • Matikan server Mongo, lalu mulai ulang menggunakan mongod --auth. Klien yang terhubung ke instance ini sekarang harus mengautentikasi dirinya sendiri.
  • Buka kembali cangkang seperti ini: mongo --authenticationDatabase "exampledb" -u "manjunath" -p. Sekarang Anda akan diminta memasukkan kata sandi.

Untuk informasi lebih lanjut, silakan berkonsultasi dengan dokumentasi proyek tentang mengaktifkan kontrol akses.

Operasi CRUD MongoDB

Seperti yang mungkin sudah Anda ketahui, singkatan CRUD cmakan, rtidur, utanggal, dan delete. Ini adalah empat operasi database dasar yang tidak dapat Anda hindari saat membuat aplikasi. Misalnya, aplikasi modern apa pun akan memiliki kemampuan untuk membuat pengguna baru, membaca data pengguna, memperbarui informasi pengguna dan, jika perlu, menghapus akun pengguna tersebut. Mari selesaikan ini di level database menggunakan MongoDB.

Buat Operasi

Penciptaan itu sama dengan memasukkan dokumen ke dalam koleksi. Di bagian sebelumnya, kami memasukkan satu dokumen menggunakan db.collection.insertOne() sintaksis. Ada metode lain yang disebut db.collection.insertMany() yang memungkinkan Anda memasukkan banyak dokumen sekaligus. Berikut sintaksnya:

> db.collection.insertMany([ <document 1> , <document 2>, ... ])

Mari buat users mengumpulkan dan mengisinya dengan beberapa pengguna sebenarnya:

> use exampledb
> db.users.insertMany([ { name: "Tom",age:15, email: "tom@example.com" }, { name: "Bob", age:35, email:"bob@example.com" }, { name: "Kate", age: 27, email: "kate@example.com" }, { name: "Katherine", age:65, email:"katherine@example.com"}
]) { "acknowledged" : true, "insertedIds" : [ ObjectId("5e25bb58ba0cf16476aa56ff"), ObjectId("5e25bb58ba0cf16476aa5700"), ObjectId("5e25bb58ba0cf16476aa5701"), ObjectId("5e25bb58ba0cf16476aa5702") ]
}

Grafik insertMany metode menerima larik objek dan, sebagai gantinya, kita mendapatkan larik ObjectIds.

Baca Operasi

Operasi baca digunakan untuk mengambil dokumen, atau beberapa dokumen dari koleksi. Sintaks untuk operasi baca adalah sebagai berikut:

> db.collection.find(query, projection)

Untuk mengambil semua dokumen pengguna, Anda dapat melakukan ini:

> db.users.find().pretty()
{ "_id" : ObjectId("5e25bb58ba0cf16476aa56ff"), "name" : "Tom", "age" : 15, "email" : "tom@example.com"
}
{ "_id" : ObjectId("5e25bb58ba0cf16476aa5700"), "name" : "Bob", "age" : 35, "email" : "bob@example.com"
}
{ "_id" : ObjectId("5e25bb58ba0cf16476aa5701"), "name" : "Kate", "age" : 27, "email" : "kate@example.com"
}
{ "_id" : ObjectId("5e25bb58ba0cf16476aa5702"), "name" : "Katherine", "age" : 65, "email" : "katherine@example.com"
}

Ini sesuai dengan SELECT * FROM USERS kueri untuk database SQL.

Grafik pretty metode adalah a metode kursor, dan masih banyak lainnya juga. Anda dapat merangkai metode ini untuk mengubah kueri Anda dan dokumen yang dikembalikan oleh kueri.

Mungkin Anda perlu memfilter kueri untuk mengembalikan subset dari koleksi - seperti menemukan semua pengguna yang berusia di bawah 30 tahun. Anda dapat mengubah kueri seperti ini:

> db.users.find({ age: { $lt: 30 } })
{ "_id" : ObjectId("5e25bb58ba0cf16476aa56ff"), "name" : "Tom", "age" : 15, "email" : "tom@example.com" }
{ "_id" : ObjectId("5e25bb58ba0cf16476aa5701"), "name" : "Kate", "age" : 27, "email" : "kate@example.com" }

Dalam contoh ini, $lt adalah operator filter kueri yang memilih dokumen yang age nilai bidang kurang dari 30. Ada banyak filter perbandingan dan kueri logis yang tersedia. Anda dapat melihat seluruh daftar di dokumentasi pemilih kueri.

Catatan: Di Mongo, Anda dapat mereplikasi SQL like kueri menggunakan regex. Sebagai contoh, SELECT * FROM users WHERE name LIKE 'Kat%' diterjemahkan menjadi db.users.find({ name: /Kat.*/ }).

Perbarui Operasi

An operasi pembaruan mengubah dokumen dalam koleksi. Mirip dengan operasi create, MongoDB menawarkan berbagai metode untuk memperbarui dokumen. Sebagai contoh:

  1. db.collection.updateOne(<filter>, <update>, <options>)
  2. db.collection.updateMany(<filter>, <update>, <options>).

Jika Anda perlu menambahkan bidang ekstra - katakan, registration - ke semua dokumen yang ada dalam koleksi, Anda dapat melakukan sesuatu seperti ini:

> db.users.updateMany({}, {$set: { registration: "incomplete"}})
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }

Argumen pertama adalah objek kosong karena kami ingin memperbarui semua dokumen dalam koleksi. Itu $set adalah operator pembaruan yang menetapkan nilai bidang dengan nilai yang ditentukan. Anda dapat memverifikasi bahwa bidang ekstra telah ditambahkan menggunakan db.users.find().

Untuk memperbarui nilai dokumen yang sesuai dengan kriteria tertentu, updateMany() menerima objek filter sebagai argumen pertamanya. Misalnya, Anda mungkin ingin menimpa nilai registration untuk complete untuk semua pengguna yang berusia 18+. Inilah yang dapat Anda lakukan:

> db.users.updateMany( {age:{ $gt: 18} }, {$set: { registration: "complete"}
}) { "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

Untuk memperbarui detail pendaftaran satu pengguna, Anda dapat melakukan ini:

> db.users.updateOne( {email: "tom@example.com" }, {$set: { registration: "complete"}
}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Hapus Operasi

A hapus operasi menghapus dokumen dari koleksi. Untuk menghapus dokumen, Anda dapat menggunakan db.collection.deleteOne(<filter>, <options>) metode, dan untuk menghapus beberapa dokumen, Anda dapat menggunakan db.collection.deleteMany(<filter>, <options>) Metode.

Untuk menghapus dokumen berdasarkan kriteria tertentu, Anda dapat menggunakan operator filter yang kami gunakan untuk operasi baca dan perbarui:

> db.users.updateOne( {email: "tom@example.com" }, {$set: { status: "dormant"}
}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.users.deleteMany( { status: { $in: [ "dormant", "inactive" ] } } ) { "acknowledged" : true, "deletedCount" : 1 }

Ini menghapus semua dokumen dengan status "tidak aktif" atau "tidak aktif".

Validasi Skema

Di awal tutorial ini, ketika saya mengatakan bahwa Mongo adalah database tanpa skema, saya agak terlalu menyederhanakan.

It is tanpa skema sejauh kita tidak perlu menentukan jumlah atau jenis kolom sebelum memasukkan data kita. Namun, Anda juga dapat menentukan skema JSON dan menggunakannya untuk menerapkan aturan validasi untuk data kami.

Mari buat validatedUsers koleksi, di mana kita dapat menggunakan validator membangun untuk menentukan bahwa a name adalah wajib dan itu email bidang cocok dengan pola tertentu:

> db.createCollection("validatedUsers", { validator: { $jsonSchema: { required: [ "name", "email" ], properties: { name: { bsonType: "string", description: "must be a string and is required" }, email: { bsonType: "string", pattern: "^.+@.+$", description: "must be a valid email and is required" } } } }
}) { "ok" : 1 }

Sekarang jika kami mencoba memasukkan data yang salah, kami akan menerima kesalahan validasi:

> db.validatedUsers.insertOne({ name: "Jim", email: "not-an-email" }) 2020-01-22T09:56:56.918+0100 E QUERY &lsqb;js] uncaught exception: WriteError({ "index" : 0, "code" : 121, "errmsg" : "Document failed validation", "op" : { "_id" : ObjectId("5e280e5847eb18010666530c"), "name" : "Jim", "email" : "not-an-email" }
}) :
WriteError({ "index" : 0, "code" : 121, "errmsg" : "Document failed validation", "op" : { "_id" : ObjectId("5e280e5847eb18010666530c"), "name" : "Jim", "email" : "not-an-email" }
})
WriteError@src/mongo/shell/bulk_api.js:458:48
mergeBatchResults@src/mongo/shell/bulk_api.js:855:49
executeBatch@src/mongo/shell/bulk_api.js:919:13
Bulk/this.execute@src/mongo/shell/bulk_api.js:1163:21
DBCollection.prototype.insertOne@src/mongo/shell/crud_api.js:264:9
@(shell):1:1

Kamu bisa membaca lebih lanjut tentang validasi skema dalam dokumentasi proyek.

Gambaran Umum Driver MongoDB

Agar aplikasi dapat berkomunikasi dengan server MongoDB, Anda harus menggunakan pustaka sisi klien yang disebut file pengemudi. Driver berada di atas server database dan memungkinkan Anda berinteraksi dengan database menggunakan API driver. MongoDB memiliki driver resmi dan pihak ketiga untuk semua bahasa dan lingkungan populer.

Driver paling populer untuk Node.js termasuk driver MongoDB asli dan Luwak. Saya akan membahas keduanya secara singkat di sini.

Driver MongoDB Node.js

Ini adalah resmi Driver MongoDB untuk Node.js. Pengemudi dapat berinteraksi dengan database baik menggunakan callback, promise atau async … await.

Anda dapat menginstalnya seperti ini:

npm install mongod

Contoh di bawah ini menunjukkan bagaimana menghubungkan driver ke server, dan daftar semua dokumen di users koleksi.

Catatan: jika Anda terhubung ke server Mongo menggunakan nama dan kata sandi, Anda harus menentukan detail ini di kode Anda.

Nama dan Kata Sandi

Jika Anda terhubung ke server Mongo menggunakan nama dan kata sandi, Anda harus menentukan detail ini di kode Anda.

const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017/exampledb'; // With authentication:
// const url = 'mongodb://<userName>:<passWord>@localhost:27017/exampledb';
// Further reading: https://docs.mongodb.com/manual/reference/connection-string/ (async () => { let client; try { client = await MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }); const db = client.db('exampledb'); const collection = db.collection('users'); const users = await collection.find().toArray(); console.log(users); } catch (err) { console.log(err.stack); } if (client) { client.close(); }
})();

Grafik MongoClient.connect mengembalikan janji. Setiap kesalahan ditangkap oleh catch blokir dan tindakan database apa pun masuk ke dalam file try blok. Jika Anda melihat melalui Dokumentasi pengemudi Mongo, Anda akan melihat bahwa API sangat mirip dengan apa yang telah kita gunakan di shell.

Pengemudi Mongoose

Driver Node.js populer lainnya untuk MongoDB adalah Luwak. Mongoose dibangun di atas driver resmi MongoDB. Kembali ketika Mongoose dirilis, ia memiliki banyak fitur yang tidak dimiliki oleh driver MongoDB asli. Salah satu fitur menonjol adalah kemampuan untuk menentukan struktur skema yang akan dipetakan ke koleksi database. Namun, versi terbaru MongoDB telah mengadopsi beberapa fitur ini dalam bentuk skema JSON dan validasi skema.

Selain skema, fitur mewah lainnya dari Mongoose termasuk model, validator dan middleware, yang mengisi metode, plugin dan seterusnya. Anda dapat membaca lebih lanjut tentang ini di dokumen Mongoose.

Anda dapat menginstal Mongoose seperti ini:

npm install mongoose

Inilah Mongoose yang setara dari contoh sebelumnya:

const mongoose = require('mongoose'); async function run() { await mongoose.connect('mongodb://localhost:27017/exampledb', { useNewUrlParser: true, useUnifiedTopology: true }); const userSchema = new mongoose.Schema({ name: String, age: String, email: String }); const User = mongoose.model('User', userSchema); const users = await User.find(); console.log(users); mongoose.connection.close();
} run().catch(error => console.log(error.stack));

Di Mongoose, semuanya dimulai dengan aa Skema. Setiap skema memetakan ke koleksi MongoDB dan menentukan bentuk dokumen dalam koleksi itu.

Kesimpulan

MongoDB adalah solusi database NoSQL populer yang sesuai dengan kebutuhan pengembangan modern. Dalam tutorial ini, kami telah membahas dasar-dasar MongoDB, shell Mongo dan beberapa driver populer yang tersedia. Kami juga telah menjelajahi operasi database umum dan tindakan CRUD di dalam shell Mongo. Sekarang saatnya Anda keluar dan mencoba apa yang telah kami bahas di sini dan banyak lagi. Jika Anda ingin mempelajari lebih lanjut, saya sarankan membuat REST API dengan MongoDB dan Node untuk membiasakan diri Anda dengan operasi dan metode database umum.

Sumber: https://www.sitepoint.com/an-introduction-to-mongodb/?utm_source=rss

tempat_img

Intelijen Terbaru

Kafe VC

Kafe VC

tempat_img