Làm cách nào để sử dụng mức tăng tự động MongoDB?

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

Làm cách nào để sử dụng mức tăng tự động MongoDB?

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
2
npm install mongoose-auto-increment
3 trên một trường

Chỉ huy

db. Sách. cập nhật ({userid. 123456}, { $inc. { 'số đơn đặt hàng'. 1} })

Ví dụ

Làm cách nào để sử dụng mức tăng tự động MongoDB?

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ố 8

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

>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
0

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'. Lần thứ hai triển khai tự động tăng tùy chỉnh

MongoDB có tự động tạo ID không?

Theo mặc định, MongoDB tạo một mã định danh ObjectID duy nhất được gán cho trường _id trong tài liệu mới trước khi ghi tài liệu đó vào cơ sở dữ liệu . Trong nhiều trường hợp, các mã định danh duy nhất mặc định được chỉ định bởi MongoDB sẽ đáp ứng các yêu cầu của ứng dụng.

MongoDB ObjectId có tăng dần không?

MongoDB không có chức năng tăng tự động vượt trội , giống như cơ sở dữ liệu SQL. Theo mặc định, nó sử dụng ObjectId 12 byte cho trường _id làm khóa chính để nhận dạng duy nhất các tài liệu.

Tôi có nên tự động tăng khóa chính không?

Việc có PK tăng tự động giúp bạn dễ dàng tạo khóa không bao giờ cần thay đổi , điều này giúp bạn dễ dàng tham khảo trong các bảng khác. Nếu dữ liệu của bạn sao cho bạn có các cột tự nhiên là duy nhất và không bao giờ có thể thay đổi thì bạn cũng có thể sử dụng chúng.

Chúng tôi có thể có bao nhiêu cột với Auto_increment?

Giá trị được tạo tự động không bao giờ được thấp hơn 0. Mỗi bảng chỉ được có một cột AUTO_INCREMENT .