Update mongoDB Document

Untuk proses update, gunakan method findByIdAndUpdate(). Parameter yang dibutuhkan adalah:

  • id: id dari collection yang akan diupdate
  • data update: data yang akan diupdate
  • options: pada tutorial digunakan option, new: true, berarti document yang dikembalikan adalah hasil update. runValidators: true, fungsi validasi document akan dijalankan.

Untuk melihat dokumentasi lengkap lihat dihttps://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

exports.updateTour = async (req, res)=> {
    try{
        const tour = await Tour.findByIdAndUpdate(req.params.id, req.body, {
            new: true, runValidators: true
        });
        res.status(201).json({
            status: 'success',
            data: {
                tour: tour
            }
        });
    }catch(err){
        res.status(400).json({
            status: 'fail',
            message: 'error update'
        });
    }
}

Isi lengkap tourController.js

const Tour = require('./../models/tourModel');

exports.getAllTours = async (req, res) => {
    try{
        const tours = await Tour.find();
        res.status(200).json({
            status: 'success',
            results: tours.length ,
            data: {
                tours: tours
            }
        });
    }catch (err){
        res.status(400).json({
            status: 'fail',
            message: 'Not Found'
        });
    }
}

exports.getTours = async (req, res) => {
    try{
        const tour = await Tour.findById(req.params.id);
        res.status(200).json({
            status: 'success',
            data: {
                tour: tour
            }
        });

    }catch(err){
        res.status(400).json({
            status: 'fail',
            message: 'No Data Found'
        });
    }
}

exports.createTour = async (req, res) => {
    try{
        const newTour = await Tour.create(req.body);
        res.status(201).json({
            status: 'success',
            data: {
                tour: newTour
            }
        });
    } catch (err){
        res.status(400).json({
            status: 'fail',
            message: 'Error insert data'
        });
    }
}

exports.updateTour = async (req, res)=> {
    try{
        const tour = await Tour.findByIdAndUpdate(req.params.id, req.body, {
            new: true, runValidators: true
        });
        res.status(201).json({
            status: 'success',
            data: {
                tour: tour
            }
        });
    }catch(err){
        res.status(400).json({
            status: 'fail',
            message: 'error update'
        });
    }
}

exports.deleteTour = (req, res)=> {
    res.status(204).json({
        status: 'success',
        data: null
    });
}

Lakukan testing melalui postman, Pilih method PATCH, isi URL dengan 127.0.0.1:3000/api/v1/tours/5fbe243f82fa8b5cb484c78b, perhatikan id yang digunakan sesuaikan dengan id data yang Anda miliki untuk update test.

Isi body dengan field yang akan diupdate, misalnya name dan price.

{
    "name" : "Test Update",
    "price" : 487
}

Bila response yang tampil adalah data yang diupdate, maka data berhasi diupdate. Silakan cek juga data di Atlas.

Silakan bereksperimen dengan mengirimkan data yang salah, atau mengubah parameter option dari findByIdAndUpdate().

Sharing is caring:

Leave a Comment