Tạo trường duy nhất trong mongodb

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về các chỉ mục duy nhất và cách sử dụng chúng để thực thi tính duy nhất của các giá trị cho một trường trên các tài liệu trong một bộ sưu tập

Giới thiệu về chỉ mục duy nhất MongoDB

Thông thường, bạn muốn đảm bảo rằng các giá trị của trường là duy nhất trên các tài liệu trong bộ sưu tập, chẳng hạn như email hoặc tên người dùng

Một chỉ mục duy nhất có thể giúp bạn thực thi quy tắc này. Trên thực tế, MongoDB sử dụng một chỉ mục duy nhất để đảm bảo rằng

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
9 là khóa chính duy nhất

Để tạo một chỉ mục duy nhất, bạn sử dụng phương thức

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
0 với tùy chọn

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
1 như thế này

db.collection.createIndex({ field: 1}, {unique: true});

Code language: CSS (css)

Ví dụ về chỉ mục duy nhất của MongoDB

Hãy lấy một số ví dụ về việc sử dụng một chỉ mục duy nhất

1) Tạo một chỉ mục duy nhất cho một trường

Đầu tiên, chèn hai tài liệu vào bộ sưu tập

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
2

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)

Thứ hai, tạo một chỉ mục duy nhất cho trường email

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)

Thứ ba, cố gắng chèn một tài liệu mới với email đã tồn tại

db.users.insertOne( { email: "[email protected]", name: "johny"} );

Code language: CSS (css)

MongoDB trả về lỗi sau

________số 8

2) Tạo một chỉ mục duy nhất cho bộ sưu tập với dữ liệu trùng lặp

Đầu tiên, thả bộ sưu tập

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
2 và tạo lại nó bằng cách chèn ba mục

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
0

Thứ hai, cố gắng tạo một chỉ mục duy nhất cho trường email của bộ sưu tập

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
2

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
2

MongoDB trả về lỗi sau

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
3

Lý do là email có các mục trùng lặp

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
5

Thông thường, bạn tạo một chỉ mục duy nhất trên một bộ sưu tập trước khi chèn bất kỳ dữ liệu nào. Bằng cách này, bạn đảm bảo các ràng buộc về tính duy nhất ngay từ đầu

Nếu bạn tạo một chỉ mục duy nhất trên một bộ sưu tập có chứa dữ liệu, bạn có nguy cơ thất bại vì bộ sưu tập có thể có các giá trị trùng lặp. Khi tồn tại các giá trị trùng lặp, việc tạo chỉ mục duy nhất không thành công như trong ví dụ trước

Để khắc phục điều này, bạn cần xem lại dữ liệu và xóa các mục trùng lặp theo cách thủ công trước khi tạo chỉ mục duy nhất. Ví dụ

Đầu tiên, xóa người dùng trùng lặp

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
5

đầu ra

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
6

Sau đó, tạo một chỉ mục duy nhất cho trường email

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
2

đầu ra

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
1

Chỉ số hợp chất duy nhất

Khi một chỉ mục duy nhất chứa nhiều hơn một trường, nó được gọi là chỉ mục hợp chất duy nhất. Chỉ mục hợp chất duy nhất đảm bảo tính duy nhất của sự kết hợp các trường

Ví dụ: nếu bạn tạo chỉ mục kết hợp duy nhất cho trường 1 và trường 2, các giá trị sau đây là duy nhất

field1field2Combination11(1,1)12(1,2)21(2,1)22(2,2)

Tuy nhiên, các giá trị sau được trùng lặp

field1field2Combination11(1,1)11(1,1) -> trùng lặp21(2,1)21(2,1) -> trùng lặp

Để tạo một chỉ mục tổng hợp duy nhất, bạn chỉ định các trường trong đặc tả chỉ mục như thế này

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
2

Hãy lấy ví dụ về việc sử dụng chỉ số ghép duy nhất

Đầu tiên, tạo bộ sưu tập

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
6 bằng cách thêm một vị trí vào đó

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
3

Thứ hai, tạo chỉ mục ghép duy nhất cho các trường

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
7 và

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
8 của tập hợp

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
6

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
4

đầu ra

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
5

Thứ ba, chèn một vị trí có giá trị

db.users.createIndex({email:1},{unique:true});

Code language: CSS (css)
7 đã tồn tại

db.users.insertMany([ { email: "[email protected]", name: "john"}, { email: "[email protected]", name: "jane"}, ]);

Code language: JavaScript (javascript)
6

Nó hoạt động vì chỉ mục

db.users.insertOne( { email: "[email protected]", name: "johny"} );

Code language: CSS (css)
1 chỉ kiểm tra sự trùng lặp của sự kết hợp giữa các giá trị vĩ độ và vĩ độ

Làm cách nào để đặt giá trị 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.

Điều gì làm cho MongoDB trở nên độc đáo?

Ví dụ: MongoDB sử dụng các tập hợp và tài liệu thay vì các bảng và hàng của cơ sở dữ liệu quan hệ truyền thống. MongoDB là duy nhất ngay cả trong số các cơ sở dữ liệu NoSQL vì nó áp dụng tất cả công nghệ NoSQL trong khi vẫn duy trì một số chức năng quan trọng trong các hệ thống cơ sở dữ liệu quan hệ .

Làm cách nào để tìm nạp các bản ghi riêng biệt trong MongoDB?

Để nhận các giá trị riêng biệt, hãy sử dụng differ() trong MongoDB . Nó 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 hoặc dạng xem và trả về kết quả trong một mảng.

Làm cách nào để nhận các giá trị riêng biệt của một trường trong MongoDB Compass?

Bạn có thể thực hiện việc này thông qua khung tổng hợp trong Compass, sử dụng $unwind và $group . $unwind được thực hiện để tạo một tài liệu duy nhất cho từng phần tử trong mảng đích, cho phép toán tử $addToSet trong giai đoạn $group để sau đó nắm bắt các thể loại dưới dạng các phần tử riêng biệt.