Hôm nay, trong bài viết này, chúng ta sẽ xem cách thực hiện cập nhật đối với tài liệu mongo và các trường Tăng tự động MongoDB trong thao tác cập nhật hoặc chèn. Sự gia tăng tự động này có thể cần thiết để duy trì tính độc đáo của các bản cập nhật tương tự hoặc có thể có nhiều trường hợp sử dụng mà bạn có thể cần đến tính năng này
Hôm nay trong bài viết này, chúng tôi sẽ đề cập đến các khía cạnh dưới đây,
- Các trường tăng tự động MongoDB
Đây có thể là một tính năng hữu ích cho nhiều trường hợp sử dụng khác, bao gồm cả việc tạo phiên bản dữ liệu dựa trên bất kỳ bản cập nhật nào đối với tài liệu mongo
Chúng ta sẽ xem ví dụ MongoDB shell CLI để thực hiện tương tự
Truy vấn được sử dụng và giải thích bên dưới chỉ nhằm mục đích trình diễn, tuy nhiên, khái niệm này có thể được sử dụng cho bất kỳ yêu cầu truy vấn tùy chỉnh nào của bạn
Hãy sử dụng tài liệu JSON mẫu bên dưới. Chúng tôi sẽ cập nhật tài liệu cho một trong các trường trong mảng tôi. e. 'số thứ tự'. Sau khi cập nhật thành công, chúng tôi sẽ trả lại tài liệu đã được cập nhật
{ "userId": "12345", "orderNumber": "100", "Name": "Categories", "Books": [ { "name": "C# Book", "catId": "5555", }, { "name": "Typescript Book", "catId": "44444", } ], "orderDate":"2020-09-20T21:07:42.313+00:00" }
Trong ví dụ trên, chúng tôi sẽ tập trung vào các trường OrderNumber mà chúng tôi muốn tăng theo bộ đếm 1 mỗi khi tôi nhận được đơn đặt hàng sách
Dưới đây là mã khung cơ bản để thiết lập kết nối với Cơ sở dữ liệu bằng MongoDB
Bước 1- Thiết lập kết nối đến Cơ sở dữ liệu bằng MongoDB
Bước 2- Tạo cơ sở dữ liệu của bạn như hiện tại
Các trường tăng tự động MongoDB
Các trường Tự động tăng MongoDB có thể được thực hiện bằng cách sử dụng toán tử
npm install mongoose-auto-increment
2npm install mongoose-auto-increment
3 trên một trườngChỉ huy
db. Sách. cập nhật [{userid. 123456}, { $inc. { 'số đơn đặt hàng'. 1} }]
Ví dụ
Truy vấn giải thích,
- trường userid sẽ khớp với userId đầu vào làm tiêu chí lọc
- $inc với các tùy chọn cập nhật tài liệu và tăng trường “orderNumber” với giá trị gia tăng là 1
- Kết quả hiển thị nếu tài liệu được nâng cấp hoặc sửa đổi
hướng dẫn
- Toán tử
npm install mongoose-auto-increment
4 cập nhật hoặc chèn các trường theo yêu cầu. Nếu trường không tồn tại,npm install mongoose-auto-increment
5 tạo trường và đặt trường thành giá trị nhất định - Chấp nhận giá trị dương và âm
- Toán tử
npm install mongoose-auto-increment
5 trên trường có giá trị null có thể tạo ra lỗi - $inc hãy thực hiện thao tác dưới dạng thao tác nguyên tử cho một lần cập nhật tài liệu nhất định
Sau khi thực hiện thành công truy vấn, chúng ta sẽ thấy tài liệu được cập nhật với một số thứ tự mới thành công
Đô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-increment
Khi 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
________số 8Bâ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
>db.employees.insert[{
"_id":getNextSequenceValue["employeeid"],
"employee_name":"Raj",
"company":"abc"
}]
>db.employees.insert[{
"_id":getNextSequenceValue["employeeid"],
"employee_name":"Ram",
"company":"xyz"
}]
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
npm install mongoose-auto-increment
0Truy 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'],0
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];
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'. Lần thứ hai triển khai tự động tăng tùy chỉnh