Đôi khi, điều quan trọng là phải có một trường tùy chỉnh trong cơ sở dữ liệu với số gia tăng tự động khác với
Hãy xem xét ví dụ về sách trong thư viện. Cùng với “_id” duy nhất do mongodb cung cấp, chúng ta có thể cần “book_id” để đếm số sách trong thư viện
Sử dụng 'mongoose-auto-increment' để thực hiện tăng tự động
'mongoose-auto-increment' là plugin tự động tăng bất kỳ trường ID nào trên lược đồ của bạn mỗi khi tài liệu được lưu
Đầu tiên chúng ta cần cài đặt ‘mongoose-auto-increment’
npm install mongoose-auto-incrementKhi chúng tôi đã cài đặt plugin, việc sử dụng trở nên rất đơn giản. Chúng tôi cần tham chiếu đến nó, khởi tạo nó bằng cách chuyển vào kết nối cầy mangut của bạn và chuyển tự động tăng. plugin vào chức năng plugin() trên lược đồ của bạn. Trong ví dụ dưới đây, chúng ta có thể thấy cách chúng ta có thể sử dụng plugin 'mongoose-auto-increment' với cầy mangut
var mongoose = require('mongoose'),Schema = mongoose.Schema,
autoIncrement = require('mongoose-auto-increment');var connection = mongoose.createConnection("mongodb://localhost/myDatabase");
autoIncrement.initialize(connection);var bookSchema = new Schema({
author: String,
title: String,
genre: String,
publishDate: Date
});bookSchema.plugin(autoIncrement.plugin, { model: 'Book', field: 'bookId' });var Book = connection.model('Book', bookSchema);
Chúng tôi có thể tăng một trường như 'bookid' như trong ví dụ trên. Nếu chúng tôi muốn trường đó bắt đầu ở một số khác 0 hoặc tăng thêm nhiều hơn một, thì chúng tôi có thể thực hiện như hình bên dưới
bookSchema.plugin(autoIncrement.plugin, {model: 'Book',
field: 'bookId',
startAt: 100,
incrementBy: 100
});
Tạo một mức tăng tự động tùy chỉnh
MongoDB không cung cấp bất kỳ chức năng vượt trội tự động tăng nào, như cơ sở dữ liệu SQL. Theo mặc định, nó sử dụng trường _id làm khóa chính để xác định duy nhất các tài liệu
Hãy xem xét tài liệu nhân viên sau đây. Chúng tôi muốn trường _id là một chuỗi số nguyên tăng tự động bắt đầu từ 1,2,3,4 đến n
{"_id":1,
"emploee_name": "Raj",
"company": "abc"
}
Bây giờ, hãy tạo bộ sưu tập bộ đếm, bộ sưu tập này sẽ theo dõi giá trị chuỗi cuối cùng cho tất cả các trường chuỗi
>db.createCollection("counters")Bây giờ, chúng ta hãy chèn tài liệu sau vào bộ sưu tập counters với employeeid làm khóa của nó
> db.counters.insert({"_id":"employeeid",
"sequence_value": 0
})
WriteResult({ "nInserted" : 1 })
Trường sequence_value theo dõi giá trị cuối cùng của chuỗi
Sử dụng đoạn mã sau để chèn tài liệu trình tự này vào bộ sưu tập bộ đếm
>db.counters.insert({_id:"employeeid",sequence_value:0})Bây giờ, chúng ta sẽ tạo một hàm getNextSequenceValue sẽ lấy tên dãy làm đầu vào, tăng số thứ tự lên 1 và trả về số thứ tự được cập nhật. Trong trường hợp của chúng tôi, tên dãy là employeeid
>function getNextSequenceValue(sequenceName){var sequenceDocument = db.counters.findAndModify({
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
new:true
});
return sequenceDocument.sequence_value;
}
Bây giờ, chúng ta có thể sử dụng hàm getNextSequenceValue để lấy dãy số tiếp theo như hình bên dưới
________số 8_______Bây giờ, chúng ta hãy xem kết quả bằng cách sử dụng truy vấn tìm kiếm
>db.employees.find()Truy vấn trên đã trả về các tài liệu sau đây có trường _id được tăng tự động
var mongoose = require('mongoose'),Schema = mongoose.Schema,
autoIncrement = require('mongoose-auto-increment');var connection = mongoose.createConnection("mongodb://localhost/myDatabase");
autoIncrement.initialize(connection);var bookSchema = new Schema({
author: String,
title: String,
genre: String,
publishDate: Date
});bookSchema.plugin(autoIncrement.plugin, { model: 'Book', field: 'bookId' });var Book = connection.model('Book', bookSchema);0
Phần kết luận
Trong hướng dẫn này, chúng ta đã thấy cách chèn số tự động tăng trong mongodb bằng hai phương pháp khác nhau. Lần đầu tiên sử dụng plugin 'mongoose-auto-increment'. Thứ hai triển khai tự động tăng tùy chỉnh