Mục đích khóa phiên bản là khóa lạc quan.
Khi được bật, giá trị phiên bản sẽ tăng lên bất kỳ khi nào tài liệu được cập nhật.
Điều này cho phép mã ứng dụng của bạn kiểm tra nếu có thay đổi giữa lần tìm nạp (đưa khóa phiên bản 42 chẳng hạn) và cập nhật hậu quả (đảm bảo giá trị phiên bản vẫn là 42). Nếu khóa phiên bản có giá trị khác (ví dụ 43 vì đã cập nhật tài liệu), mã ứng dụng của bạn có thể xử lý sửa đổi đồng thời.
Khái niệm rất giống nhau thường được sử dụng trong cơ sở dữ liệu quan hệ thay vì khóa bi quan có thể mang lại hiệu suất kinh khủng. Tất cả ORM gốc đều cung cấp một tính năng như vậy. Ví dụ, nó được mô tả độc đáo in ObjectDB documentation. Đó là một cơ sở dữ liệu đối tượng được thực hiện trong Java nhưng cũng áp dụng cùng một khái niệm.
blog post được liên kết trong nhận xét của Behlül chứng minh tính hữu ích của khóa lạc quan với ví dụ cụ thể, nhưng chỉ cho các thay đổi mảng, xem bên dưới.
Ở phía đối diện, đây là một trường hợp đơn giản, nơi nó vô dụng: một hồ sơ người dùng có thể được chỉnh sửa bởi chính chủ sở hữu của nó. Ở đây bạn có thể loại bỏ khóa lạc quan và cho rằng chỉnh sửa cuối cùng luôn thắng.
Vì vậy, chỉ bạn mới biết nếu ứng dụng của bạn cần khóa lạc quan hay không. Trường hợp sử dụng theo trường hợp sử dụng.
Tình huống Mongoose có phần đặc biệt.
Khóa tối ưu chỉ được bật cho các mảng vì định dạng bộ nhớ trong sử dụng chỉ mục vị trí. Đây là vấn đề được mô tả bởi blog post được liên kết trong nhận xét của câu hỏi. Tôi tìm thấy số explanation được đưa ra trong danh sách gửi thư mongoose-orm
khá rõ ràng: nếu bạn cần khóa lạc quan cho các trường khác, bạn cần tự xử lý nó.
Dưới đây là gist cho biết cách triển khai chiến lược thử lại cho hoạt động add
. Một lần nữa, làm thế nào bạn muốn xử lý nó phụ thuộc vào trường hợp sử dụng của bạn, nhưng nó sẽ là đủ để giúp bạn bắt đầu.
Tôi hy vọng điều này sẽ xóa mọi thứ.
Chúc mừng
Bài đăng trên blog này nói về trường hợp bạn truy cập các phần tử trong mảng phụ theo vị trí. Nhưng mông cổ thực tế sử dụng id thay vì vị trí. Vì vậy, tôi cũng không chắc chắn: http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning –