Hướng dẫn soft delete nodejs - xóa mềm nodejs

Ở phần trước mình đã giới thiệu với mọi người cách update dữ liệu trên MongoDB rồi. Phần này mình sẽ tiếp tục giới thiệu đến mọi người cách delete dữ liệu trong MongoDB bằng Node.js.

1, Delete một bản ghi duy nhất trong MongoDB bằng Node.js.

-Để có thể delete duy nhất một bản ghi trong MongoDB trên Node.js thì mọi người sử dụng phương thức deleteOne() với cú pháp sau:

.deleteOne(filter, options, callback)

Trong đó:

  • filter là object chứa các điều kiện query để chọn ra bản ghi cần xóa (xem query).
  • options là thông số cấu hình thêm (xem). Tham số này có thể bỏ trống.
  • callback là hàm sẽ được gọi khi thực thi query, thường thì ta sử dụng luôn closure function.

Lưu ý: Khi sử dụng phương thức deleteOne thì nếu như dữ liệu so khớp với điều kiện filter lớn hơn 1 bản ghi thì nó sẽ chỉ xóa duy nhất 1 bản ghi đầu tiên trong số các bản ghi so khớp.

VD:  Xóa duy nhất một sản phẩm có name='ao thun trang':  Xóa duy nhất một sản phẩm có name='ao thun trang'

const mongoClient = require('mongodb').MongoClient;
mongoClient.connect('mongodb://127.0.0.1:27017/nodedb', function(err, db) {
    if (err) throw err;
    var products = db.collection('products');
    //lấy ra số lượng tìm được ban đầu
    products.count({name:'ao thun trang'},function(err, count){
        if (err) throw err;
        console.log('truoc luc delete co: ' + count + ' ban ghi');
    })
    products.deleteOne({name: 'ao thun trang'}, function (err,res) {
        if (err) throw err;
        console.log('delete success: ' + res.result.n + ' record');
    });
    // sau khi thuc hien delete
    products.count({name:'ao thun trang'},function(err, count){
        if (err) throw err;
        console.log('sau khi delete con: ' + count + ' ban ghi');
    })
    db.close();
});

Kết Quả:

truoc luc delete co: 2 ban ghi
delete success: 1 record
sau khi delete con: 1 ban ghi

2, Delete nhiều bản ghi trong MongoDB bằng Node.js.

-Nếu như muốn delete tất cả các dữ liệu khớp với điều kiện query thì chúng ta sử dụng phương thức deleteMany() với cú pháp và cách sử dụng giống như phương thức deleteOne().

VD: Xóa tất cả các bản ghi có name='ao phong 2' trong collection products.: Xóa tất cả các bản ghi có name='ao phong 2' trong collection products.

/*deleteMany*/
const mongoClient = require('mongodb').MongoClient;
mongoClient.connect('mongodb://127.0.0.1:27017/nodedb', function(err, db) {
    if (err) throw err;
    var products = db.collection('products');
    //lấy ra số lượng tìm được ban đầu
    products.count({name:'ao phong 2'},function(err, count){
        if (err) throw err;
        console.log('truoc luc delete co: ' + count + ' ban ghi');
    })
    products.deleteMany({name: 'ao phong 2'}, function (err,res) {
        if (err) throw err;
        console.log('delete success: ' + res.result.n + ' record');
    });
    // sau khi thuc hien delete
    products.count({name:'ao phong 2'},function(err, count){
        if (err) throw err;
        console.log('sau khi delete con: ' + count + ' ban ghi');
    })
    db.close();
});

Kết Quả::

truoc luc delete co: 3 ban ghi
delete success: 3 record
sau khi delete con: 0 ban ghi

2, Delete nhiều bản ghi trong MongoDB bằng Node.js.

-Nếu như muốn delete tất cả các dữ liệu khớp với điều kiện query thì chúng ta sử dụng phương thức deleteMany() với cú pháp và cách sử dụng giống như phương thức deleteOne().CURD trong MongoDB rồi nhé!

VD: Xóa tất cả các bản ghi có name='ao phong 2' trong collection products.

3, Lời kết.

-Như vậy kết thúc phần này là mình đã giới thiệu xong đến mọi người về CURD trong MongoDB rồi nhé!

Hướng dẫn soft delete nodejs - xóa mềm nodejs

Đã trả lời thg 6 6, 2018 9:36 SA

Đã trả lời thg 6 6, 2018 9:36 SA

Theo mình chỉ nên dùng soft delete trong một vài trường hợp

  • Trường hợp đúng nghĩa là xoá tạm, sau đó record có khả năng hồi phục lại nguyên dạng
  • Trường hợp dữ data lại để thực hiện thống kê gì đó, trường hợp này nếu là mình thì mình cũng sẽ migrate các data cần thống kê ra bảng riêng để không ảnh hưởng đến performance của các bảng chính được query nhiều

Nên theo ý kiến cả nhân mình thì việc dùng soft delete cho tất các các tables là một việc không nên làm Nếu bạn hỏi nên giữ hay không thì mình xin một vote không giữ =))

Hướng dẫn soft delete nodejs - xóa mềm nodejs
Nếu bạn hỏi nên giữ hay không thì mình xin một vote không giữ =))

Hướng dẫn soft delete nodejs - xóa mềm nodejs

Đã trả lời thg 7 26, 2018 10:05 SA

Đã trả lời thg 7 26, 2018 10:05 SA

Vì thiết kế ban đầu vậy rồi nên mình nghĩ bạn cứ giữa nguyên soft delete vậy, vì khi DB của bạn phình lên thì việc delete bằng cách xóa trực tiếp cũng là vấn đề vì xử lý delete chậm hơn, và bạn cũng phải xử lý lại những query liên quan , đồng thời phải test lại, và đánh giá hiệu năng. Cách mình suggest là:

  • Luôn backup DB trước khi delete
  • Tạo batch/cron job để chạy xóa data dưới server (một ngày chạy một lần, 2 lần, tùy vào lượng records cần delete có lớn không)

==> tham khảo thêm ý kiến của bạn @bs90 (Heasygame) ở trên nhé