Masukkan pembaruan, hapus di node js mongodb

Di blog ini, mari kita lihat apa itu CRUD, demonstrasi operasi CRUD di MongoDB, dan bagaimana operasi dilakukan dengan cara Sinkron dan Asinkron. Pengetahuan dasar Node. js dihargai

Basis data NoSQL digunakan. MongoDB

Masukkan pembaruan, hapus di node js mongodb
Masukkan pembaruan, hapus di node js mongodb

Daftar isi

1. pengantar

CRUD adalah singkatan dari CREATE, READ, UPDATE & DELETE, yang merupakan operasi dasar dalam database

Dalam posting ini, saya telah menggunakan MongoDB sebagai database utama saya, yang merupakan database NoSQL. Berbeda dengan model baris/kolom tradisional, ini menyimpan data alias dokumen dalam format JSON dan melakukan operasi CRUD menggunakan Node. bahasa js

Pada dasarnya Node. js berfungsi asinkron atau non-pemblokiran secara default sehingga tidak menunggu jika CPU digunakan secara intensif oleh kode

Jadi merancang operasi CRUD sebagai sinkron atau asinkron berdasarkan kasus kami adalah proses yang menantang, terutama ketika kami menggunakannya dalam operasi server waktu nyata. Di bagian blog berikut, saya telah menjelaskan tentang bagaimana saya melakukan operasi CRUD dengan cara sinkronisasi/async

Saya telah memberikan contoh Database Film secara keseluruhan, yang berisi detail yang terkait dengan film tertentu sehingga Anda dapat memanipulasinya berdasarkan kasus penggunaan Anda

2. Menyiapkan MongoDB (NoSQL)

MongoDB adalah database dokumen, yang artinya menyimpan data dalam dokumen mirip JSON. Kami percaya ini adalah cara paling alami untuk berpikir tentang data dan jauh lebih ekspresif & kuat daripada model baris/kolom tradisional

Kami memerlukan dua komponen utama di bawah ini untuk menyiapkan browser MongoDB

  1. Server Komunitas MongoDB — Unduh di sini
  2. Kompas MongoDB (Penampil GUI) — Unduh di sini

Masukkan pembaruan, hapus di node js mongodb
Masukkan pembaruan, hapus di node js mongodb
Server Komunitas MongoDB

Masukkan pembaruan, hapus di node js mongodb
Masukkan pembaruan, hapus di node js mongodb
Kompas MongoDB (Penampil GUI untuk MongoDB)

Setelah menginstal kedua aplikasi, kita perlu menambahkan jalur server MongoDB ke Variabel Lingkungan di PC Anda. Jadi navigasikan diri Anda di direktori C PC Anda dan temukan lokasi mongod. exe dan salin jalur alamat. Dalam kasus saya, saya menemukan alamatnya

C. \Program Files\MongoDB\Server\4. 4\bin

Tambahkan lokasi di atas ke variabel lingkungan seperti di bawah ini

Masukkan pembaruan, hapus di node js mongodb
Masukkan pembaruan, hapus di node js mongodb

Sekarang, kami siap membuat dokumen di database MongoDB kami. Juga, kita dapat melihat database di Kompas MongoDB, setelah membuat dokumen pertama

Masukkan pembaruan, hapus di node js mongodb
Masukkan pembaruan, hapus di node js mongodb
Tampilan dokumen Kompas MongoDB. Sumber — Penulis

3. Eksekusi Sinkron Vs Asinkron

Di Node. Js, kita dapat melakukan operasi CRUD basis data dengan cara sinkron (pemblokiran) dan asinkron (non-pemblokiran)

Terkadang saat melakukan operasi CRUD, kita mungkin memerlukan variabel untuk dikirim melalui API atau menggunakannya dalam kode selanjutnya, dll. , Dalam hal ini, kami menggunakan pemrograman sinkron, di mana baris dalam kode menunggu baris sebelumnya selesai sebelum dieksekusi

Ini adalah proses yang memakan waktu, jadi alternatifnya kita dapat melakukan operasi secara asinkron. Ini murni berdasarkan kasus penggunaan yang sedang kami kerjakan. Kita akan melihat demonstrasi di kedua cara untuk melakukan operasi CRUD yang sama

4. Membuat Skema, Model, dan Objek

Skema seperti cetak biru yang menentukan apa yang akan disimpan dalam database dan dalam format apa

Untuk melakukan demonstrasi ini dengan cara yang lebih efektif dan mudah dipahami, seperti yang saya katakan sebelumnya, saya akan membuat database film yang berisi properti film seperti,

  1. Nama film — (String)
  2. Direktur — (String)
  3. Peringkat IMDB — (Angka)
  4. Transmisikan — (Larik)
  5. Tanggal rilis — (Tanggal waktu)
  6. Genre — (String)
  7. Sekuel — (Boolean)

Alasan utama untuk menyimpan elemen di atas adalah untuk menggabungkan semua jenis struktur data seperti String, Boolean, Number, Array, DateTime, dll. ,

const mongoose = require('mongoose') // npm install --save mongoose
console.clear()

// Creating a Database
mongoose.connect('mongodb://localhost/MOVIELIBRARY', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Connected to MongoDB...'))
.catch(err => console.error('Could not connect to MongoDB...', err));

const movieSchema = new mongoose.Schema({
    movieName : String,
    director: String,
    imdbRating: Number,
    cast: [String],
    releaseDate: Date,
    genre: String,
    sequel: Boolean
});

// Creating an Class based on the Schema (blueprint / template)
const movieClass = mongoose.model('movieClass', movieSchema);

// Creating a new object (Instance of a class)
const tenet = new movieClass({
    movieName : "Tenet",
    director: "Christopher Nolan",
    imdbRating: 8,
    cast: ["George David Washington, Robert Pattinson"],
    releaseDate: new Date('2020-12-04'),
    genre: "science-fiction",
    sequel: false
})

const result = tenet.save();
console.log('Document created', result)

Jadi pada cuplikan kode di atas, saya telah membuat movieSchema yang berisi cetak biru dokumen tersebut. Dan nanti saya membuat konstanta movieClass yang merupakan model yang dibuat berdasarkan skema

Dengan menggunakan model tersebut, kita dapat membuat instance alias objek yang digunakan untuk entri baru dalam dokumen. Ini sangat mirip dengan konsep kelas dan objek OOPS

Dan seperti yang Anda lihat, saya telah membuat objek baru yang disebut 'tenet' menyerupai nama film, mengisi bidang, dan kemudian menyimpannya. Sekarang jika kita memeriksa penampil basis data GUI — Kompas MongoDB, kita harus melihat dokumen baru dibuat

Masukkan pembaruan, hapus di node js mongodb
Masukkan pembaruan, hapus di node js mongodb

Sekarang mari kita lanjutkan lebih jauh dengan operasi CRUD baik secara sinkron maupun asinkron

5. BUAT (Sinkron)

Kami telah membuat dokumen baru dengan nama 'tenet' sebelumnya. Nah sekarang kita buat sebuah fungsi yang bisa digunakan untuk membuat banyak listing film selanjutnya

const movieClass = require('./movieSchema')

// // CREATE
// Function Declaration
async function insertMovie(name_, director_, rating_, cast_, date_, genre_, sequel_){
    const movieObject = new movieClass({
        movieName : name_,
        director: director_,
        imdbRating: rating_,
        cast: cast_,
        releaseDate: date_,
        genre: genre_,
        sequel: sequel_
    });
    result = await movieObject.save() 
    return result
}

// Function Call
let output_1 = insertMovie('Inception', 'Christopher Nolan', 7, ['Leonardo DiCaprio', 'Cillian Murphy'], new Date('2010-07-16'),
                         'science-fiction', false)
output_1.then(function(response) {
    console.log(response, 'output response')
})

// Function Call
let output_2 = insertMovie('Tenet', 'Christopher Nolan', 7, ['George David Washington', 'Robert Pattinson'], new Date('2020-12-04'),
                         'science-fiction', false)
output_2.then(function(response) {
    console.log(response, 'output response')
})

// Function Call
let output_3 = insertMovie('The Conjuring', 'James Wan', 6, ['Vera Farmiga', 'Patrick Wilson'], new Date('2013-07-15'),
                         'supernatural horror', true)
output_3.then(function(response) {
    console.log(response, 'output response')
})
_

Setelah fungsi insertMovie dideklarasikan, kita dapat melakukan pemanggilan fungsi dengan parameter inputnya, yang perlu diperbarui di database. Setelah dimasukkan, kami akan mendapatkan dokumen yang dimasukkan. Di sini kami telah memasukkan 3 film

6. BUAT (Asinkron)

Demikian pula, kita dapat memasukkan dokumen baru ke Mongo DB, tanpa menunggu atau tanpa pemblokiran kode
Juga, saya telah menambahkan 3 set film lainnya menggunakan cara tanpa pemblokiran kode

const movieClass = require('./movieSchema')

// // CREATE
var theDarkKnight = new movieClass({movieName : "The dark knight",
                            director: "Christopher Nolan",
                            imdbRating: 8,
                            cast: ["Christian Bale", "Heath Ledger"],
                            releaseDate: new Date('2008-01-14'),
                            genre: "superhero",
                            sequel: true})

console.log('DB Updated');
theDarkKnight.save()

var djangoUnchained = new movieClass({movieName : "Django Unchained",
                            director: "Quentin Tarantino",
                            imdbRating: 8,
                            cast: ["Christoph Waltz", "Jamie Foxx"],
                            releaseDate: new Date('2012-12-12'),
                            genre: "revisionist Western",
                            sequel: false})

console.log('DB Updated');
djangoUnchained.save()

var theNun = new movieClass({movieName : "The Nun",
                            director: "Corin Hardy",
                            imdbRating: 6,
                            cast: ["Taissa Farmiga", "Demián Bichir"],
                            releaseDate: new Date('2018-09-04'),
                            genre: "supernatural horror",
                            sequel: false})

console.log('DB Updated');
theNun.save()

7. BACA (Sinkron)

Setelah kami membuat dokumen, sekarang kami dapat memfilternya berdasarkan kondisi khusus dan mengekstrak dokumen tertentu dari MongoDB

Demi singkatnya, saya telah membuat beberapa fungsi menggunakan

  1. Ambil data dengan menggunakan pengidentifikasi unik
  2. Ambil data dengan menggunakan operator pembanding seperti ( >, ≥, <, ≤, in, not in)
  3. Ambil data dengan menggunakan operator logis seperti (dan, atau)
  4. Ambil data dengan menggunakan kondisi regex
  5. Ambil data dan kembalikan jumlah total dokumen
const movieClass = require('./movieSchema')

// // READ 
// Function Declaration - Variant 1
async function fetchMovies(){
    const movieObjects = await movieClass
        .find({sequel: false}) // Find movies with no sequel
        .limit(10) // Display upto 10 fields
        .sort({imdbRating: 1}) // Sort based on imdb rating
        .select({movieName:1, director:1} // Select only the fields specified here,  remove select to list all fields in the document
        ); 
    return movieObjects
}

// Function Call
let read_output_ = fetchMovies();
read_output_1.then(function(response) {
    console.log(response, 'output response')
})

// Function Declaration - Variant 3
async function fetchMovies_Comparision(){
    // eq (equal)
    // ne (not equal)
    // gt (greater than)
    // gte (greater than or equal to)
    // lt (less than)
    // lte (less than or equal to)
    // in
    // nin (not in)
    
    // Query here
    const movieObjects = await movieClass
        .find({sequel: { $eq: true }}) // Fetches the movies with sequel equal to true
        // .find({imdbRating : { $gte: 5, $lte: 9 }, sequel : { $eq: true}}) // Fetches the movies with imdb rating > 5 & imdb rating < 9, and sequel to be true
        // .find({imdbRating : { $in:[7,8,9] }}) // Fetches the movies with imdb rating with 7,8,9

        .limit(10) 
        .sort({imdbRating: 1})
        .select({movieName:1, director:1});
        return movieObjects
}

// Function Call
let read_output_2 = fetchMovies_Comparision();
read_output_2.then(function(response) {
    console.log(response, 'output response')
})

// Function Declaration - Variant 3
async function fetchMovies_Logical(){
    // or
    // and
    
    // Query here
    const movieObjects = await movieClass
        .find()
        // .find({ sequel: /^true/ }) // Regex - Self explanatory

        // .or([ {sequel: false}, {imdbRating: 8} ]) // Fetches the movie with sequel false or imdb rating = 8
        .and([ {sequel: false}, {imdbRating: 8} ]) // Fetches the movie with sequel false and imdb rating = 8

        .limit(10) 
        .sort({imdbRating: 1})

        return movieObjects
}

// Function Call
let read_output_3 = fetchMovies_Logical();
read_output_3.then(function(response) {
    console.log(response, 'output response')
})

// Function Declaration - Variant 4
async function fetchMovies_Regex(){    
    // Query here
    const movieObjects = await movieClass
        
        .find({ director: /^Quentin/ })         // Starts with Quentin 
        // .find({ director: /tarantino$/i })   // Ends with tarantino
        // .find({ director: /.*Nolan.*/i })    // Contains Nolan
        
        .limit(10) 
        .sort({conversationId: 1})
        .select({}); // Select all
        return movieObjects
}

// Function Call
let read_output_4 = fetchMovies_Regex();
read_output_4.then(function(response) {
    console.log(response, 'output response')
})

// Function Declaration - Variant 5
async function fetchMovies_Count(){
    const movieObjects = await movieClass
        // .find({sequel: false, imdbRating : 8})
        .find({sequel: false,})
        .limit(10)
        .sort({imdbRating: 1})
        .countDocuments();
    
        return movieObjects
}

// Function Call
let read_output_5 = fetchMovies_Count();
read_output_5.then(function(response) {
    console.log(response, 'output response')
})

8. BACA (Asynchronous)

“OPERASI BACA SANGAT SINKRONIS”

9. PEMBARUAN (Sinkron)

Selalu ada kejadian di mana kami perlu memperbarui dokumen di masa mendatang. Jadi, dalam fungsi di bawah ini, saya telah menambahkan (menambahkan) record baru ke dalam array dan juga mengganti Boolean dan Number dengan nilai baru. Kita dapat menggunakan $push dan $set array update operator yang dicadangkan di MongoDB dan Anda dapat mencoba semua operator lainnya

Anda juga dapat memanipulasi dan membuat fungsi baru berdasarkan yang dibuat di bawah ini, untuk mematuhi kasus penggunaan Anda

const movieClass = require('./movieSchema')

// // UPDATE
// Update Array
async function update_MovieCast(movieName, newCast){

    const movieObjects = await movieClass.collection.findOneAndUpdate(
        {movieName: movieName}, 
        { 
            $push: {
                cast: `${newCast}`},
        }
        );
    return movieObjects
}

// Function Call
let update_output_1 = update_MovieCast('Inception', 'Michael Caine')
update_output_1.then(function(response) {
    console.log(response, 'output response')
})


// Update Boolean and Number
async function update_SequelAndImdbRating(movieName, sequel_new, rating){

    const movieObjects = await movieClass.collection.findOneAndUpdate(
        {movieName: movieName}, 
        { 
            $set: {
                sequel: sequel_new,
                imdbRating: rating
            }
        }
        );
    return movieObjects
}

// Function Call
let update_output_2 = update_SequelAndImdbRating('The Nun', true, 8.5);
update_output_2.then(function(response) {
    console.log(response, 'output response')
})
_

10. PEMBARUAN (Asinkron)

Terkadang kita tidak perlu menunggu DB diperbarui, sehingga kita dapat memulai fungsi dan melanjutkan ke baris kode berikutnya dan pembaruan dapat terjadi pada waktunya.

const movieClass = require('./movieSchema')

// // UPDATE
// Function to Update Array
function update_MovieCast(movieName, newCast){

    movieClass.collection.findOneAndUpdate(
        {movieName: movieName}, 
        { 
            $push: {
                cast: `${newCast}`},
        }
        );
    console.log('DB Updated');
}

// Function Call
update_MovieCast('Tenet', 'Michael Caine') // Update new cast in the movie tenet

// Function to Update Boolean and Number
function update_SequelAndImdbRating(movieName, sequel_new, rating){

    movieClass.collection.findOneAndUpdate(
        {movieName: movieName}, 
        { 
            $set: {
                sequel: sequel_new,
                imdbRating: rating
            }
        }
        );
    console.log('DB Updated');
}

// Function Call
update_SequelAndImdbRating('The Nun', true, 8.5)

11. Hapus (Sinkron)

Biasanya kami juga dapat menghapus catatan dengan menentukan id unik berdasarkan dokumen

const movieClass = require('./movieSchema')

// // DELETE
// Function Declaration
async function deleteMovie(name){
    const movieObjects = await movieClass.deleteOne( {movieName: name});
    return movieObjects
}

// Function Call
let delete_output = deleteMovie('The Nun');
delete_output.then(function(response) {
    console.log(response, 'output response
})
_

12. Hapus (Asynchronous)

const movieClass = require('./movieSchema')

// // DELETE
// Function Declaration
async function deleteMovie(name){
    const movieObjects = await movieClass.deleteOne( {movieName: name});
    console.log('Document Deleted', name)
}

// Function Call
deleteMovie('Tenet');

13. Sumber Daya dan Referensi

Saya harap saya bisa menjelaskan operasi CRUD di MongoDB. Anda dapat melihat repo GitHub yang berisi seluruh implementasi kode dan jangan ragu untuk memecahkannya

Bagaimana cara memperbarui data di MongoDB di node js?

Anda dapat memperbarui catatan, atau dokumen seperti yang disebut di MongoDB, dengan menggunakan metode updateOne() . Parameter pertama dari metode updateOne() adalah objek kueri yang menentukan dokumen mana yang akan diperbarui. Catatan. Jika kueri menemukan lebih dari satu rekaman, hanya kejadian pertama yang diperbarui.

Bagaimana cara menghapus data di MongoDB menggunakan node js?

Anda dapat menghapus record, atau dokumen seperti yang disebut di MongoDB, dengan menggunakan metode remove() . Parameter pertama dari metode remove() adalah objek kueri yang menentukan dokumen mana yang akan dihapus. Catatan. Metode remove() sudah tidak digunakan lagi. Gunakan deleteOne() atau deleteMany() sebagai gantinya.

Bagaimana cara memperbarui dan menghapus di node js?

Buat Rekam. Edit rute/produk. js untuk operasi CRUD. .
Perbarui Catatan. Buat metode permintaan dengan mengambil catatan tunggal untuk menampilkan formulir edit dengan data yang diisi. router. .
Hapus Catatan. Buat metode permintaan untuk menghapus catatan

Bagaimana cara memasukkan data ke MongoDB menggunakan node js?

Untuk menyisipkan record, atau dokumen seperti yang disebut di MongoDB, ke dalam koleksi, kita menggunakan metode insertOne() . Parameter pertama metode insertOne() adalah objek yang berisi nama dan nilai dari setiap bidang dalam dokumen yang ingin Anda sisipkan.