Trường duy nhất trong MongoDB ở đâu?

Cách tốt nhất để tìm tất cả các tên thuộc tính trường duy nhất trong
một bộ sưu tập?

Giả định rằng các thuộc tính của tài liệu có thể thay đổi dựa trên
dữ liệu và bạn sẽ không bao giờ biết những tên đó có thể là gì. (nhưng
tại một thời điểm nào đó, bạn có thể biết tên thuộc tính có giá trị)

Tôi giả sử bản đồ giảm?
with)

hoặc

Theo dõi dữ liệu này tại thời điểm nhập và lưu trữ dữ liệu này trong đốm màu json,
hoặc một số dạng tương tự khác.

Đôi khi trong MongoDB, chúng tôi có thể cần một trường chỉ chứa các giá trị duy nhất. Điều đó có nghĩa là các giá trị trùng lặp không được phép cho một trường cụ thể trong suốt bộ sưu tập. Những tình huống như vậy có thể xảy ra thường xuyên. Ví dụ: giả sử có một cơ sở dữ liệu chứa thông tin chi tiết về tất cả nhân viên làm việc trong một lĩnh vực cụ thể. Mỗi tài liệu có năm trường – tên, employee_id, tuổi, vị trí và tất nhiên, trường _id được tạo tự động. Tên, tuổi và vị trí có thể giống nhau đối với nhiều nhân viên, nhưng employee_id của mỗi nhân viên luôn là duy nhất. Để đảm bảo rằng mọi tài liệu được chèn vào bộ sưu tập phải có một employee_id duy nhất, chúng ta phải đặt một số loại kiểm tra duy nhất trên employee_id. Trong bài viết này, chúng tôi sẽ thảo luận về cách thực hiện kiểm tra duy nhất trong MongoDB

chỉ mục duy nhất

Mỗi khi chúng tôi tạo một tài liệu trong MongoDB, chúng tôi luôn có trường _id được tạo tự động. Trường này biểu thị một id duy nhất cho tài liệu. Nhưng khi chúng tôi muốn đặt kiểm tra duy nhất trên một trường hoặc tổ hợp các trường theo cách thủ công, chúng tôi sử dụng các chỉ mục duy nhất. Hãy xem cách chúng ta có thể sử dụng các chỉ mục duy nhất

> db. thông tin chi tiết. tìm()
{ "_id". ObjectId("5d667a43f849ba8866dd24ca"), "employee_id". "0001", "tên". "Tối đa", "tuổi". 25, "vị trí". "New York" }
>

Chúng tôi có một bộ sưu tập chi tiết và có một tài liệu bên trong nó. Tài liệu chứa trường employee_id, name, age, location và _id. Chưa có chỉ mục duy nhất nào được tạo. Vậy điều gì sẽ xảy ra nếu chúng ta chèn một tài liệu khác với employee_id hiện có?

> db. thông tin chi tiết. chèn ({"employee_id". "0001", "tên". "John", "tuổi". 21, "vị trí". "Texas"})
WriteResult({ "nInserted". 1 })
>

Thao tác chèn hoạt động ngay cả khi employee_id giống với tài liệu cuối cùng. Điều này xảy ra bởi vì, theo mặc định, không có chỉ mục duy nhất trong bất kỳ trường nào. Chúng tôi phải tạo các chỉ mục duy nhất theo cách thủ công. Vì vậy, hãy tạo một chỉ mục duy nhất trên trường employee_id. Nhưng trước tiên, chúng ta phải xóa một trong hai tài liệu vì employee_id giống nhau trong cả hai tài liệu

> db. thông tin chi tiết. xóaOne({tên. "John"})
{ "đã xác nhận". đúng, "đã xóaCount". 1 }
> db. thông tin chi tiết. tìm()
{ "_id". ObjectId("5d667a43f849ba8866dd24ca"), "employee_id". "0001", "tên". "Tối đa", "tuổi". 25, "vị trí". "New York" }
>

Bây giờ nó ổn. Hãy tạo một chỉ mục duy nhất cho trường employee_id

> db. thông tin chi tiết. createIndex({"employee_id". 1}, { duy nhất. true})
{
        "createdCollectionAutomatically". sai,
        "numIndexes Before". 1,
        "numIndexesafter". 2,
        "được". 1
}
>

Đây là cách chúng tôi tạo một chỉ mục duy nhất trong MongoDB bằng cách sử dụng phương thức createIndex. Phương thức createIndex có hai tham số – đầu tiên là tên của trường, được đặt thành 0 và thứ hai là tùy chọn duy nhất được đặt thành true. Hãy thử chèn một tài liệu với employee_id hiện có

> db. thông tin chi tiết. chèn ({"employee_id". "0001", "tên". "John", "tuổi". 21, "vị trí". "Texas"})
WriteResult({
        "nInserted". 0,
        "Lỗi ghi". {
                "mã". 11000,
                "errmsg". "Bộ sưu tập lỗi khóa trùng lặp E11000. demoDB. chỉ số chi tiết. nhân viên_id_1 khóa trùng lặp. {. "0001" }"
        }
})
>

Chúng tôi đã cố gắng chèn một tài liệu có employee_id “0001”. Một tài liệu có employee_id tương tự đã tồn tại trong bộ sưu tập. Đây là lý do tại sao thao tác chèn không thành công. Quan sát thông báo lỗi

"ờ". "Bộ sưu tập lỗi khóa trùng lặp E11000. demoDB. chỉ số chi tiết. nhân viên_id_1 khóa trùng lặp. {. "0001" }"

Điều này xảy ra vì chúng tôi đã đặt một chỉ mục duy nhất trên trường employee_id. Hãy xem điều gì sẽ xảy ra khi chúng ta thêm một tài liệu với một employee_id duy nhất

> db. thông tin chi tiết. chèn ({"employee_id". "0002", "tên". "John", "tuổi". 21, "vị trí". "Texas"})
WriteResult({ "nInserted". 1 })
>

Lần này, employee_id là “0002” và tài liệu được chèn vào

Các chỉ mục duy nhất trên sự kết hợp của các trường

Trong MongoDB, chúng ta cũng có thể đặt các chỉ mục duy nhất trên tổ hợp các trường. Giả sử chúng tôi muốn tất cả các tài liệu trong bộ sưu tập của mình phải có sự kết hợp duy nhất giữa tên và vị trí. Nếu tồn tại một tài liệu có tên “Lisa” và vị trí “Texas”, chúng tôi không thể thêm bất kỳ tài liệu nào khác có trường tên là “Lisa” và trường vị trí là “Texas”

Hãy xem làm thế nào chúng ta có thể tạo các chỉ mục độc đáo như vậy

> db. thông tin chi tiết. createIndex({"tên". 1, "địa điểm". 1}, { duy nhất. true})
{
        "createdCollectionAutomatically". sai,
        "numIndexes Before". 1,
        "numIndexesafter". 2,
        "được". 1
}
>

Chúng tôi chỉ cần chuyển các trường trong tham số đầu tiên mà chúng tôi muốn áp dụng chỉ mục duy nhất. Bộ sưu tập chi tiết đã có một trường có tên “Lisa” và vị trí “Texas”. Hãy thử thêm một tài liệu nữa với các giá trị như vậy

> db. thông tin chi tiết. chèn ({"employee_id". "0002", "tên". "Lisa", "tuổi". 24, "vị trí". "Texas"})
WriteResult({
        "nInserted". 0,
        "Lỗi ghi". {
                "mã". 11000,
                "errmsg". "Bộ sưu tập lỗi khóa trùng lặp E11000. demoDB. chỉ số chi tiết. tên_1_vị trí_1 trùng phím. {. "Lisa",. "Texas" }"
        }
})
>

Có, nó hiển thị lỗi vì chúng tôi đã áp dụng một chỉ mục duy nhất trên trường kết hợp tên và vị trí

Sự kết luận

Kiểm tra duy nhất được sử dụng trong hầu hết mọi cơ sở dữ liệu hiện tại. Nó rất hữu ích trong việc duy trì cơ sở dữ liệu. MongoDB cung cấp các chỉ mục duy nhất để áp dụng các kiểm tra duy nhất. Chúng tôi có thể áp dụng một chỉ mục duy nhất trên một trường hoặc kết hợp các trường

Làm cách nào để có được các trường duy nhất trong MongoDB?

Trong MongoDB, phương thức differ() tìm các giá trị riêng biệt cho một trường nhất định trong một tập hợp và trả về kết quả trong một mảng. Phải mất ba tham số đầu tiên là trường trả về các giá trị riêng biệt và các tham số khác là tùy chọn.

Làm cách nào để sử dụng duy nhất trong MongoDB?

Để nhận các giá trị duy nhất và bỏ qua các giá trị trùng lặp, hãy sử dụng differ() trong MongoDB . khác biệt () tìm các giá trị riêng biệt cho một trường được chỉ định trên một bộ sưu tập và trả về kết quả trong một mảng.

Khóa duy nhất trong MongoDB là gì?

Ràng buộc duy nhất trong MongoDB sẽ chỉ cho phép một tài liệu duy nhất có cùng giá trị cho khóa được lập chỉ mục . Nếu chúng tôi cố gắng chèn cùng một giá trị cho một khóa được lập chỉ mục, điều đó sẽ dẫn đến lỗi. Điều này trả về mọi tài liệu trong bộ sưu tập. Đây là một nỗ lực để chèn một bản ghi có cùng mã.

Làm cách nào để lấy id duy nhất trong MongoDB?

Tổng quan .
Đảm bảo tính duy nhất của định danh ở cấp cơ sở dữ liệu
Sử dụng ObjectID làm mã định danh duy nhất
Sử dụng một tài liệu truy cập duy nhất để tạo từng mã định danh duy nhất
Sử dụng một tài liệu truy cập duy nhất phân bổ lô số nhận dạng duy nhất
Sử dụng nhiều tài liệu truy cập phân bổ lô số nhận dạng duy nhất