Tôi có thể sử dụng id trong mongodb không?

Chúng ta đã sử dụng MongoDB Object Id trong tất cả các chương trước. Trong chương này, chúng ta sẽ tìm hiểu cấu trúc của ObjectId

ObjectId là loại BSON 12 byte có cấu trúc như sau -

  • 4 byte đầu tiên biểu thị số giây kể từ kỷ nguyên unix
  • 3 byte tiếp theo là định danh máy
  • 2 byte tiếp theo bao gồm id quá trình
  • 3 byte cuối cùng là giá trị bộ đếm ngẫu nhiên

MongoDB sử dụng ObjectIds làm giá trị mặc định của trường _id của mỗi tài liệu, được tạo trong khi tạo bất kỳ tài liệu nào. Sự kết hợp phức tạp của ObjectId làm cho tất cả các trường _id trở nên độc nhất

Tạo ObjectId mới

Để tạo một ObjectId mới, hãy sử dụng đoạn mã sau -

>newObjectId = ObjectId()

Câu lệnh trên trả về id được tạo duy nhất sau đây -

ObjectId("5349b4ddd2781d08c09890f3")

Thay vì MongoDB tạo ObjectId, bạn cũng có thể cung cấp id 12 byte -

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

Tạo dấu thời gian của tài liệu

Vì _id ObjectId theo mặc định lưu trữ dấu thời gian 4 byte, nên trong hầu hết các trường hợp, bạn không cần lưu trữ thời gian tạo của bất kỳ tài liệu nào. Bạn có thể lấy thời gian tạo tài liệu bằng phương thức getTimestamp -

>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

Điều này sẽ trả về thời gian tạo tài liệu này ở định dạng ngày ISO -

ISODate("2014-04-12T21:49:17Z")

Chuyển đổi ObjectId thành Chuỗi

Trong một số trường hợp, bạn có thể cần giá trị của ObjectId ở định dạng chuỗi. Để chuyển đổi ObjectId thành chuỗi, hãy sử dụng đoạn mã sau –

Trong MongoDB, trường _id làm khóa chính cho bộ sưu tập để mỗi tài liệu có thể được xác định duy nhất trong bộ sưu tập. Trường _id chứa một giá trị ObjectID duy nhất

Mặc định khi chèn tài liệu vào trong collection nếu bạn không thêm tên trường có _id vào tên trường thì MongoDB sẽ tự động thêm trường Object id như hình bên dưới

Tôi có thể sử dụng id trong mongodb không?

Khi bạn truy vấn các tài liệu trong một bộ sưu tập, bạn có thể xem ObjectId cho từng tài liệu trong bộ sưu tập

Nếu bạn muốn đảm bảo rằng MongoDB không tạo Trường _id khi bộ sưu tập được tạo và nếu bạn muốn chỉ định id của chính mình làm _id của bộ sưu tập, thì bạn cần xác định rõ ràng điều này trong khi tạo bộ sưu tập

Khi tạo một trường id một cách rõ ràng, nó cần được tạo với _id trong tên của nó

Hãy xem một ví dụ về cách chúng ta có thể đạt được điều này

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Giải thích mã

  1. Chúng tôi giả định rằng chúng tôi đang tạo tài liệu đầu tiên trong bộ sưu tập và do đó, trong câu lệnh trên khi tạo bộ sưu tập, chúng tôi xác định rõ ràng trường _id và xác định giá trị cho nó

Nếu lệnh được thực hiện thành công và bây giờ sử dụng lệnh find để hiển thị các tài liệu trong bộ sưu tập, Kết quả sau sẽ được hiển thị

đầu ra

Tôi có thể sử dụng id trong mongodb không?

Kết quả hiển thị rõ ràng rằng trường _id mà chúng tôi đã xác định khi tạo bộ sưu tập hiện được sử dụng làm khóa chính cho bộ sưu tập

Trong MongoDB, khá dễ dàng và hiệu quả để tương tác với các tài liệu bằng cách sử dụng các ID duy nhất. Phương thức find() của MongoDB chứa một danh sách mở rộng các toán tử và lệnh được hỗ trợ giúp truy xuất tài liệu ở dạng tinh chỉnh. ID duy nhất có thể được sử dụng với phương thức find() để lấy tài liệu dựa trên ID của chúng. Bằng cách làm theo hướng dẫn này, người dùng Mongo có thể lấy tài liệu bằng cách sử dụng id của những tài liệu đó trong phương thức find(). Ngoài ra, để hiểu rõ hơn, một vài ví dụ được cung cấp cho thấy cách sử dụng phương thức “find() by id” trong MongoDB

Trong hướng dẫn này, chúng ta sẽ xem xét việc thực hiện các thao tác truy vấn bằng cách sử dụng ID tài liệu trong MongoDB. MongoDB cung cấp một toán tử tìm để truy vấn tài liệu từ một bộ sưu tập

Trong hướng dẫn này, trước tiên chúng ta sẽ xem xét truy vấn tài liệu bằng cách sử dụng ID Tài liệu trong truy vấn MongoDB Shell và sau đó sử dụng mã trình điều khiển Java

2. ID tài liệu của tài liệu MongoDB là gì?

Cũng giống như bất kỳ hệ thống quản lý cơ sở dữ liệu nào khác, MongoDB yêu cầu một mã định danh duy nhất cho mỗi tài liệu được lưu trữ trong một bộ sưu tập. Mã định danh duy nhất này hoạt động như một khóa chính cho bộ sưu tập

Trong MongoDB, ID bao gồm 12 byte

  • dấu thời gian 4 byte thể hiện việc tạo ID được tính bằng giây kể từ kỷ nguyên Unix
  • giá trị được tạo ngẫu nhiên 5 byte dành riêng cho máy và quy trình
  • bộ đếm tăng dần 3 byte

Trong MongoDB, ID được lưu trữ trong trường có tên _id và được tạo bởi máy khách. Do đó, ID nên được tạo trước khi gửi tài liệu đến cơ sở dữ liệu. Về phía khách hàng, chúng tôi có thể sử dụng ID do trình điều khiển tạo hoặc tạo ID tùy chỉnh

Mã định danh duy nhất được lưu trữ trong lớp ObjectId. Lớp này cung cấp các phương thức thuận tiện để lấy dữ liệu được lưu trữ trong ID mà không thực sự phân tích cú pháp nó. MongoDB sẽ thêm trường _id và gán một ObjectId duy nhất cho tài liệu nếu _id không được chỉ định trong khi chèn tài liệu

3. Khởi tạo cơ sở dữ liệu

Đầu tiên, hãy thiết lập cơ sở dữ liệu mới baeldung và bộ sưu tập mẫu, phương tiện

use baeldung;
db.createCollection("vehicle");

Hơn nữa, hãy thêm một vài tài liệu vào bộ sưu tập bằng cách sử dụng phương thức insertMany

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);

Trong trường hợp chèn thành công, lệnh trên sẽ in ra một JSON tương tự như hình bên dưới

________số 8

Chúng tôi đã thiết lập thành công cơ sở dữ liệu và bộ sưu tập. Chúng tôi sẽ sử dụng cơ sở dữ liệu và bộ sưu tập này cho tất cả các ví dụ

4. Sử dụng MongoDB Shell

Chúng tôi sẽ sử dụng db. thu thập. phương thức find(query, projector) để truy vấn tài liệu từ MongoDB

Đầu tiên, hãy viết một truy vấn sẽ trả về tất cả các tài liệu bộ sưu tập xe

db.vehicle.find({});

Truy vấn trên trả về tất cả các tài liệu

ObjectId("5349b4ddd2781d08c09890f3")
0

Hơn nữa, hãy viết một truy vấn để tìm nạp tài liệu bộ sưu tập phương tiện bằng cách sử dụng ID được trả về trong các kết quả ở trên

ObjectId("5349b4ddd2781d08c09890f3")
1

Truy vấn trên trả về tài liệu bộ sưu tập xe có _id bằng ObjectId(“62d01d17cdd1b7c8a5f945b9”)

ObjectId("5349b4ddd2781d08c09890f3")
2

Hơn nữa, chúng tôi có thể truy xuất nhiều tài liệu bộ sưu tập phương tiện bằng cách sử dụng ID với toán tử trong truy vấn

ObjectId("5349b4ddd2781d08c09890f3")
3

Truy vấn trên trả về tất cả tài liệu bộ sưu tập phương tiện cho các ID được truy vấn trong toán tử in

ObjectId("5349b4ddd2781d08c09890f3")
0

Tương tự như vậy, bất kỳ toán tử truy vấn nào cũng có thể được sử dụng làm bộ lọc cho phương thức find() có ID được truy vấn

Ngoài ra, điều quan trọng cần lưu ý là trong khi truy vấn tài liệu bằng trường _id, giá trị chuỗi ID tài liệu phải được chỉ định dưới dạng ObjectId() chứ không phải Chuỗi

Hãy thử truy vấn một tài liệu hiện có với ID là giá trị Chuỗi

ObjectId("5349b4ddd2781d08c09890f3")
5

Thật không may, truy vấn trên sẽ không trả về bất kỳ tài liệu nào vì không tồn tại bất kỳ tài liệu nào có ID là giá trị Chuỗi 62d01d17cdd1b7c8a5f945b9

5. Sử dụng trình điều khiển Java

Cho đến giờ, chúng ta đã học cách truy vấn tài liệu bằng ID với MongoDB Shell. Bây giờ chúng ta hãy thực hiện tương tự bằng cách sử dụng trình điều khiển Java MongoDB

Trước khi thực hiện thao tác cập nhật, trước tiên hãy kết nối với bộ sưu tập phương tiện trong cơ sở dữ liệu baeldung

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
0

Ở đây, trong trường hợp này, chúng tôi đang kết nối với MongoDB, đang chạy ở cổng mặc định 27017 trên localhost

Đầu tiên, hãy viết mã để truy vấn tài liệu bằng ID

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
1

Ở đây, chúng tôi chuyển bộ lọc Bson làm tham số cho phương thức find() với trường _id để truy vấn. Đoạn mã trên sẽ trả về tài liệu bộ sưu tập phương tiện trong đó _id bằng ObjectId(“62d01d17cdd1b7c8a5f945b9”)

Hơn nữa, hãy viết một đoạn trích để truy vấn các tài liệu có nhiều ID

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
2

Truy vấn trên trả về tất cả tài liệu bộ sưu tập xe cho các ID được truy vấn

Cuối cùng, hãy thử truy vấn bộ sưu tập phương tiện bằng ID do trình điều khiển tạo

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
3

Truy vấn trên sẽ không trả về bất kỳ tài liệu nào vì tài liệu có ID mới được tạo sẽ không tồn tại trong bộ sưu tập phương tiện

6. Phần kết luận

Trong bài viết này, chúng ta đã học cách truy vấn tài liệu bằng ID tài liệu trong MongoDB. Lúc đầu, chúng tôi đã xem xét các trường hợp sử dụng này trong truy vấn MongoDB Shell, sau đó chúng tôi thảo luận về mã trình điều khiển Java tương ứng

MongoDB có ID không?

MongoDB sử dụng ObjectIds làm giá trị mặc định của trường _id của mỗi tài liệu , được tạo trong quá trình tạo bất kỳ tài liệu nào. ID đối tượng được coi là khóa chính trong mọi bộ sưu tập MongoDB. Nó là một mã định danh duy nhất cho mỗi tài liệu hoặc hồ sơ. cú pháp. ObjectId(

Làm cách nào để lấy dữ liệu bằng id trong MongoDB?

MongoDB cung cấp một hàm có tên findById() được sử dụng để truy xuất tài liệu khớp với 'id' do người dùng chỉ định . Để sử dụng findById trong MongoDB, hàm find() được sử dụng. Nếu không tìm thấy tài liệu nào khớp với 'id' đã chỉ định, nó sẽ trả về giá trị rỗng.

Làm cách nào để tạo id trong MongoDB?

Để tạo objectID mới theo cách thủ công trong MongoDB, bạn có thể khai báo objectId dưới dạng phương thức . Nói một cách đơn giản, chúng ta có thể nói rằng ID đối tượng là một mã định danh duy nhất cho mỗi bản ghi. Trong hình ảnh bên dưới, bạn có thể quan sát thấy rằng chúng tôi đang khai báo một biến có phương thức ID đối tượng làm giá trị và nó sẽ trả về hệ thập lục phân duy nhất.

Id có thể là chuỗi MongoDB không?

Có, bạn có thể sử dụng một chuỗi làm _id . Tôi chỉ khuyên dùng nó nếu bạn có một số giá trị (trong tài liệu) tự nhiên là một khóa duy nhất tốt.