findOneAndUpdate Mongoose rất quan trọng và khi nào nên sử dụng?

Nội dung bài viết

Video học lập trình mỗi ngày

findOneAndUpdate mongoose là một hàm mà được sử dụng trong nhiều trường hợp. Trong Mongodb có nhiều functions để update một document như updateOne, nhưng đôi lúc chúng ta nên làm việc với một hoạt động mà lượng truy cập đồng thời cao, do đó findOneAndUpdate mongodb là một function nên quan tâm.

findOneAndUpdate Mongoose và cách sử dụng

Đầu tiên chúng ta đi cú pháp khi chúng ta sử dụng findOneAndUpdate.

findOneAndUpdate(filter, update,  options,  callback)

Như tên hàm thì nó có nghĩa là tìm kiếm và cập nhật dữ liệu. Đầu tiên thì filter và sau đó update. Tôi sẽ lấy ví dụ dựa trên mongoose homepage.

const Character = mongoose.model('Character', new mongoose.Schema({
  name: String,
  age: Number
}));

await Character.create({ name: 'Jean-Luc Picard' });

const filter = { name: 'Jean-Luc Picard' };
const update = { age: 59 };

// `doc` is the document _before_ `update` was applied
let doc = await Character.findOneAndUpdate(filter, update);
doc.name; // 'Jean-Luc Picard'
doc.age; // undefined

doc = await Character.findOne(filter);
doc.age; // 59

Đầu tiên chúng ta create một document Character.create({ name: 'Jean-Luc Picard' }) và sau đó muốn thêm một thuộc tính age vào trong dữ liệu thì chúng ta có thể sử dụng updateOne() và cũng có thể sử dụng findOneAndUpdate(). Vì sao lại sử dụng và lợi ích gì ở đây khi sử dụng findOneAndUpdate.

Atomic Updates

Theo tài liệu của Mongodb thì khi sử dụng function này thì chính là đang sử dụng một hoạt động nguyên tử trong databases. Bạn có biết atom datatabse là gì không?

findOneAndUpdate is find a document and update it in one atomic operation. Requires a write lock for the duration of the operation.

Điều đó có nghĩa là gì, có nghĩa là khi một findOneAndUpdate() đang thực thực thi thì mọi yêu cầu vào db được khóa lại trong suốt quá trình này diễn ra. Cho nên nó đảm bảo tính toàn vẹn của dữ liệu và tránh được sự xung đột dữ liệu khi lượng người dùng truy cập lên cao. Có thể nó giống khái niệm mutex operation.

Trường hợp thực tế khi sử dụng findOneAndUpdate

Có một trường hợp thực tế mà chúng ta luôn gặp hằng ngày đó là những giờ giảm giá, những ngày hotdeal được các trang thương mại điện tử như là shopee, lazada, hay là tiki tạo ra. Thì lượng người dùng truy cập lớn tạo ra xung đột dữ liệu như, chỉ có 10 iphone 14 bán trong 12 giờ đầu tiên, nhưng có đến 100.000 người mua. Liệu có quá bán hay không?. Ngoài ra có một thực tế khác đó là chuyển tiền trong Banks.

Transaction in mongodb

Giả lập số lượng người mua vượt quá tồn kho trong nodejs

Quá bán là gì? và chúng ta sẽ xử lý thế nào trong việc trong kho chỉ có 10 và 100.000 người mua cùng một lúc. Xem video trước mà tôi đã giải thích và giả lập lượng đồng thời cao.

Sau đó hay xem xét tình huống sử dụng findOneAndUpdate có lợi như thế nào. Video ở đầu bài viết, or truy cập kênh youtube.

Có thể bạn đã bị missing