Hướng dẫn does mongodb automatically assign id? - mongodb có tự động gán id không?

Điều kiện tiên quyết

Hướng dẫn này giả định rằng bạn đã cài đặt và định cấu hình một tài khoản và cụm Atlas MongoDB. Nếu bạn chưa làm như vậy, hãy làm theo các bước dưới đây:

  • Sẵn sàng một cụm hoặc tạo một. Bạn có thể tạo một cụm Atlas MongoDB miễn phí. Tìm hiểu thêm về MongoDB Atlas.
  • Tạo người dùng cơ sở dữ liệu và thêm IP công khai của bạn để có quyền truy cập mạng vào cụm.
  • Tải xuống Sò Mongo và sau đó thêm
  • Sử dụng chuỗi kết nối cụm cụm trên dòng lệnh của bạn để kết nối với cụm và truy cập nó thông qua vỏ Mongo.

Lưu ý: Tất cả các lệnh trong hướng dẫn này được chạy trên vỏ Mongo.: All the commands in this tutorial are run on the mongo shell.

Cân nhắc

Để đảm bảo cơ sở dữ liệu của bạn vẫn có thể mở rộng với một số lượng lớn tài liệu, chúng tôi khuyên bạn nên tránh việc sử dụng mẫu tự động cho trường _ID hoặc bất kỳ trường nào trong MongoDB. Trong trường hợp thất bại đồng thời, việc sử dụng một mẫu như vậy có thể dẫn đến sự trùng lặp dữ liệu.

Giá trị mặc định là lý tưởng cho _ID được tạo tự động chứ không phải là giá trị tự động. Tham khảo tài liệu chính thức của MongoDB trên ID đối tượng để biết thêm thông tin.

Làm thế nào để tự động tăng cường hoạt động trong MongoDB?

Mặc dù MongoDB không hỗ trợ chuỗi tự động kích thích như một tính năng mặc định như một số cơ sở dữ liệu quan hệ, chúng tôi vẫn có thể đạt được chức năng này bằng cách sử dụng bộ sưu tập truy cập. Bộ sưu tập bộ đếm sẽ có một tài liệu duy nhất theo dõi giá trị định danh duy nhất hiện tại. Tìm hiểu làm thế nào để tạo một bộ sưu tập truy cập và thực hiện tự động dưới đây.

Hướng dẫn từng bước để tự động nâng một trường trong Atlas MongoDB bằng cách sử dụng hàm JavaScript

Chúng tôi sẽ triển khai chức năng tự động bằng cách sử dụng Atlas Triggersin MongoDB. Trình kích hoạt cho phép bạn lên lịch thực hiện logic phía máy chủ hoặc thực thi nó để đáp ứng với các sự kiện cơ sở dữ liệu. Tìm hiểu thêm về kích hoạt cơ sở dữ liệu là gì.Triggersin MongoDB Atlas. Triggers allow you to schedule the execution of server-side logic or execute it in response to database events. Learn more about what database triggers are.

Tạo bộ sưu tập

Đối với phương pháp này, bạn cần ít nhất hai bộ sưu tập.

Bộ sưu tập đầu tiên sẽ chứa các chi tiết của sinh viên; Do đó chúng tôi sẽ đặt tên cho nó là sinh viên. Chạy lệnh sau để tạo bộ sưu tập sinh viên.students. Run the following command to create a students collection.

db.createCollection("students");

Bộ sưu tập thứ hai sẽ giữ giá trị định danh duy nhất hiện tại cho các sinh viên. Hãy đặt tên cho nó. Chạy lệnh sau để tạo bộ sưu tập bộ đếm.counters. Run the following command to create a counters collection.

db.createCollection("counters");

Tạo kích hoạt

Để thực hiện các trình kích hoạt để tự động nâng, hãy đăng nhập vào tài khoản Atlas MongoDB của bạn, hãy mở cụm bạn muốn làm việc. và nhấp vào kích hoạt. Triggers.

Hướng dẫn does mongodb automatically assign id? - mongodb có tự động gán id không?

Nhấp vào Thêm kích hoạt và đặt các giá trị sau vào các trường tương ứng.Add Trigger and set the following values to the corresponding fields.

  • Loại kích hoạt: cơ sở dữ liệu: Database
  • Tên: Auto
    db.createCollection("counters");
    0increment
    db.createCollection("counters");
    0Trigger
    : Auto
    db.createCollection("counters");
    0Increment
    db.createCollection("counters");
    0Trigger
  • Đã bật: Bật: ON
  • Sự kiện ghi đè: BẬT: ON
  • Các nguồn dữ liệu liên kết: Các) nguồn dữ liệu: :
  • Tên cụm: :
  • Tên cơ sở dữ liệu ::
  • Tên bộ sưu tập: Học sinh : students
  • Loại hoạt động: Chèn: Insert
  • Tài liệu đầy đủ: Trên : ON
  • Chọn loại sự kiện: Chức năng : Function

Trong trường chức năng, thêm mã sau.

exports = async function(changeEvent) {
    var docId = changeEvent.fullDocument._id;
    
    const countercollection = context.services.get("").db(changeEvent.ns.db).collection("counters");
    const studentcollection = context.services.get("").db(changeEvent.ns.db).collection(changeEvent.ns.coll);
    
    var counter = await countercollection.findOneAndUpdate({_id: changeEvent.ns },{ $inc: { seq_value: 1 }}, { returnNewDocument: true, upsert : true});
    var updateRes = await studentcollection.updateOne({_id : docId},{ $set : {studentId : counter.seq_value}});
    
    console.log(`Updated ${JSON.stringify(changeEvent.ns)} with counter ${counter.seq_value} result : ${JSON.stringify(updateRes)}`);
    };
  • Thay thế
    db.createCollection("counters");
    2 bằng tên dịch vụ cụm của bạn.

Mã của bạn sẽ trông như thế này.

Hướng dẫn does mongodb automatically assign id? - mongodb có tự động gán id không?

Nhấp vào Lưu để lưu kích hoạt.Save to save the trigger.

Chạy kích hoạt

Trong mã trên, trước tiên chúng tôi đã khởi tạo bộ sưu tập bộ đếm và xác định trình kích hoạt sự kiện chèn cho bộ sưu tập sinh viên. Khi bạn chèn một tài liệu vào bộ sưu tập của sinh viên, hàm kích hoạt sẽ thực thi, cập nhật trường

db.createCollection("counters");
3 trong bộ sưu tập bộ đếm và thêm
db.createCollection("counters");
3 vào bộ sưu tập của sinh viên dưới dạng trường
db.createCollection("counters");
5.counters collection and defined an insert event trigger for the students collection. When you insert a document into the students collection, the trigger function executes, which updates the
db.createCollection("counters");
3 field in the counters collection and adds the
db.createCollection("counters");
3 to the students collection as
db.createCollection("counters");
5 field.

Toán tử MongoDB Inc tăng một trường theo giá trị được chỉ định (1 trong trường hợp của chúng tôi). Tham số returnNewDocument, khi được đặt thành TRUE, trả về một cách nguyên tử, trong khi tham số UPSERT, khi được đặt thành True, thêm một bộ đếm

db.createCollection("counters");
5 mới nếu không gian tên hiện tại không có nó.

Để xem kích hoạt trong hành động, hãy chạy các lệnh sau để chèn một vài tài liệu vào bộ sưu tập sinh viên.students collection.

db.students.insert({
   "name":"Jhon Doe"
});
db.students.insert({
   "name":"David Smith"
});
db.students.insert({
    "name":"Amanda Herny"
});

Chạy mã sau để đảm bảo kết quả nhất quán.

db.students.find().pretty();

Sau khi thực thi mã hoàn tất, bạn sẽ nhận được kết quả sau.

{
        "_id" : ObjectId("60b3a7fa1ce57d7f961a2c12"),
        "name" : "Jhon Doe",
        "studentId" : NumberLong(1)
}
{
        "_id" : ObjectId("60b3a8021ce57d7f961a2c13"),
        "name" : "David Smith",
        "studentId" : NumberLong(2)
}
{
        "_id" : ObjectId("60b3a8091ce57d7f961a2c14"),
        "name" : "Amanda Herny",
        "studentId" : NumberLong(3)
}

Bạn cũng có thể xem kết quả bằng đồ họa trong Atlas MongoDB bằng cách đi qua bộ sưu tập của sinh viên.students collection.

Hướng dẫn does mongodb automatically assign id? - mongodb có tự động gán id không?

Để kiểm tra tài liệu trong bộ sưu tập bộ đếm, hãy chạy mã sau.counters collection, run the following code.

db.counters.find().pretty();

Bạn sẽ nhận được kết quả sau.

{ "_id" : ObjectId("60b39cf75886657cb75527bb"), "seq_value" : "0" }
{
        "_id" : {
                "db" : "myFirstDatabase",
                "coll" : "students"
        },
        "seq_value" : NumberLong(3)
}

Lưu ý giá trị của trường SEQ_VALUE trong bộ sưu tập bộ đếm. Nó đã tăng lên 3 từ 0, vì chúng tôi đã chèn 3 tài liệu vào bộ sưu tập sinh viên.seq_value field in the counters collection. It has increased to 3 from 0, as we have inserted 3 documents into the students collection.

Bản tóm tắt

Mặc dù tự động tăng cường trong MongoDB không phải là một tính năng tiêu chuẩn, bạn vẫn có thể có được kết quả tương tự bằng cách triển khai bộ sưu tập bộ đếm trên trường _ID. Bạn chỉ cần duy trì một bộ sưu tập và tài liệu khác để theo dõi số lượng. Ưu điểm lớn nhất của phương pháp này là nó là trình điều khiển bất khả tri, có nghĩa là bất kỳ khách hàng nào chèn các tài liệu kích hoạt kích hoạt để đặt giá trị bộ đếm chính xác. Nếu bạn muốn tìm hiểu về nhiều cách tiếp cận hơn, hãy đọc blog của chúng tôi về việc tạo số nhận dạng độc đáo trên toàn cầu cho MongoDB.

Câu hỏi thường gặp

ID có bắt buộc trong MongoDB không?

Trong MongoDB, mỗi tài liệu được lưu trữ trong một bộ sưu tập đòi hỏi một trường _ID duy nhất hoạt động như một khóa chính. Nếu một tài liệu được chèn bỏ qua trường _ID, trình điều khiển MongoDB sẽ tự động tạo một ObjectID cho trường _ID.each document stored in a collection requires a unique _id field that acts as a primary key. If an inserted document omits the _id field, the MongoDB driver automatically generates an ObjectId for the _id field.

Làm thế nào để giá trị của ID được gán cho một tài liệu?

Bài 3.1: Giá trị của _ID được gán cho tài liệu như thế nào?Trả lời: Nó được tạo tự động như một giá trị loại ObjectID.Bạn có thể chọn một giá trị loại không ObjectID khi chèn một tài liệu mới, miễn là giá trị đó là duy nhất cho tài liệu này.It is automatically generated as an ObjectId type value. You can select a non ObjectId type value when inserting a new document, as long as that value is unique to this document.

Làm thế nào để MongoDB xác định ID đối tượng?

Để xác định một bộ sưu tập các đối tượng trong một đối tượng, hãy sử dụng ilist chỉ có một getter.Bạn không cần phải khởi tạo nó trong hàm tạo, vì Realm sẽ tạo một phiên bản thu thập ngay lần đầu tiên thuộc tính được truy cập.use an IList with only a getter. You do not need to initialize it in the constructor, as realm will generate a collection instance the first time the property is accessed.

Làm thế nào để MongoDB cập nhật dữ liệu bằng ID?

Các bước thực hiện như sau:..
Bước 1: Trong bước đầu tiên, bạn cần lưu trữ ObjectID vào một biến.anyvariablename = db.....
Bước 2: Trong bước thứ hai, bạn cần đặt ID mới.....
Bước 3: Trong bước thứ ba, bạn cần chèn ID mới vào tài liệu.....
Bước 4: Trong bước thứ tư, bạn cần xóa ID cũ ..