Chỉ mục duy nhất của Spring MongoDB

org.springframework.dao.DuplicateKeyException: Write failed with error code 11000 and error message 'E11000 duplicate key error collection: .items index: serialNumber dup key

Nếu có sự bất thường trùng lặp tồn tại trong dữ liệu, thì khi một ứng dụng Java mới khởi động với chỉ mục duy nhất, nó sẽ không khởi động được

Giải pháp

Nếu bạn cần tạo một chỉ mục duy nhất, không chạy nó ở chế độ nền. Nếu bạn vẫn cần lập chỉ mục cho nó, thì hãy đảm bảo rằng bạn không có bản sao trong nguồn dữ liệu của mình. Điều này cũng có thể được thực hiện với cấp độ mã, chỉ để kiểm tra trước khi chèn. Còn không thì bạn cần có cơ chế loại bỏ trùng lặp khỏi dữ liệu nguồn trước khi chạy index



Chia sẻ

Show

nhãn

Chỉ mục nền DuplicateKeyException Dữ liệu mùa xuân MongoDB MongoDB Chỉ mục duy nhất

Nhãn. Chỉ mục nền DuplicateKeyException MongoDB Spring Data MongoDB Chỉ mục duy nhất

Chia sẻ

Cài đặt Docker trên Windows 11 với WSL Ubuntu 22. 04

14 Tháng Năm, 2022

Điều này là để cài đặt Docker trong Ubuntu WSL mà không cần sử dụng ứng dụng Windows Docker. Thực hiện theo các bước dưới đây. Cài đặt Ubuntu 22. 04 WSL 1. Bật Hệ thống con Windows cho nền tảng Linux và Máy ảo Đi tới Bảng điều khiển -> Chương trình -> Chương trình và Tính năng -> Bật hoặc tắt các tính năng của Windows 2. Chuyển sang WSL 2 Mở Powershell và gõ lệnh bên dưới. wsl --set-default-version 2 Nếu bạn chưa có WSL 2, hãy tải xuống gói WSL 2 mới nhất và cài đặt nó. 3. Cài đặt Ubuntu Mở Microsoft Store và tìm kiếm Ubuntu. Chọn phiên bản bạn định cài đặt. Tôi muốn sử dụng phiên bản LTS mới nhất Ubuntu 22. 04. Nhấp vào nút Nhận. Sẽ mất vài phút để tải xuống và cài đặt. 4. Mở phiên bản Ubuntu đã cài đặt đã được cài đặt. Nếu bạn gặp lỗi như hình bên dưới, hãy đảm bảo cài đặt bản cập nhật WSL2 Kernel. Nếu đó là phiên bản Ubuntu cũ hơn, thông báo lỗi sẽ giống như hình ảnh bên dưới. Lỗi. WSL 2 yêu cầu cập nhật

Chia sẻ

Đọc thêm

Cách đặt tiêu đề thiết bị đầu cuối trong Ubuntu 18. 04 LTS

22 Tháng Sáu, 2020

Trong các phiên bản Ubuntu cũ hơn, bạn có thể chỉ cần nhấp chuột phải vào thanh tiêu đề của cửa sổ Ubuntu Terminal và đặt bất kỳ tiêu đề nào bạn muốn. Nhưng thật không may sau Ubuntu 18. 04 LTS tính năng này đã biến mất. Tôi đã từng thích tính năng này vì tôi có nhiều tab trong một cửa sổ đầu cuối duy nhất của một chàng trai. Tôi thường thích làm việc trong nhiều tab đầu cuối được đặt tên như bên dưới. Theo mặc định, trong phiên bản Ubuntu mới hơn, nó chỉ hiển thị thư mục hiện tại. Hãy xem làm thế nào chúng ta có thể làm điều này. Dấu nhắc Ubuntu Trong Bash của Ubuntu, có một biến môi trường $PS1 chịu trách nhiệm về các chi tiết mà dòng lệnh nhắc. Bạn sẽ có thể lặp lại điều này và xem những gì bên trong nó. Nếu tôi lặp lại nó, nó sẽ in một cái gì đó như thế này. tiếng vang $PS1 \[\e]0;\u@\h. \w\a\]${debian_chroot. +($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]. \[\033[01;34m\]\w\[\033[00m\]\$ Nếu bạn thực sự muốn hiểu ý nghĩa của điều này, bạn có thể tham khảo trang này. Cập nhật thiết bị đầu cuối

Chia sẻ

Đọc thêm

Cách truy cập bộ chứa trong Rancher từ dòng lệnh mà không cần SSH Nếu bạn đã triển khai nhóm ứng dụng trong Rancher, đôi khi bạn phải truy cập bộ chứa đang chạy cho các tác vụ khác nhau. Có thể, để kiểm tra một số tệp, theo dõi nhật ký, chạy một số lệnh, sao chép tệp, v.v. Giả sử bạn có một nhóm ứng dụng đang chạy trong Rancher như hình ảnh sau. Sử dụng giao diện người dùng web Một trong những cách để truy cập vùng chứa sẽ là sử dụng giao diện người dùng Rancher. Nếu bạn nhấp vào tên pod và sau đó trên trang tiếp theo, bạn có thể chọn Execute Shell từ menu ngữ cảnh của Pod. Sau đó, nó phải mang cửa sổ lệnh trong chính giao diện người dùng web. Tuy nhiên, phương pháp này có những hạn chế. Bạn không thể sao chép tệp vào hoặc từ Pod bằng chính giao diện người dùng web. Sử dụng Rancher CLI Có thể tìm thấy liên kết đến gói CLI ở góc dưới cùng bên phải của giao diện người dùng web Rancher. Chọn ứng dụng khách CLI theo hệ điều hành của bạn và tải xuống. Tôi đang sử dụng Linux, vì vậy tôi đã tải xuống ứng dụng khách Linux. Giải nén nó. tar -xf rancher-linux-am

Ngay cả các thư viện phổ biến như Mongoose cũng tạo các chỉ mục duy nhất dưới mui xe để thực thi các xác thực duy nhất trên các bộ sưu tập Mongo

Làm thế nào để một chỉ mục duy nhất hoạt động dưới mui xe?

Một chỉ mục duy nhất đảm bảo rằng một giá trị nhất định chỉ có thể được lưu trữ một lần cho một trường nhất định. Bất cứ khi nào bạn tạo một bộ sưu tập trong Mongo, một chỉ mục duy nhất sẽ tự động được tạo trên trường _id. Đây là điều đảm bảo rằng không có hai tài liệu nào có cùng _id được lưu trữ

Một chỉ mục duy nhất được thực thi trước, trong và sau khi tạo

Nếu bạn có dữ liệu hiện có trong một bộ sưu tập không phải là duy nhất cho một trường nhất định thì bạn sẽ gặp lỗi DuplicateKey khi tạo chỉ mục ngay từ đầu

Điều này bao gồm sự vắng mặt của trường mục tiêu. Nếu một tài liệu trong bộ sưu tập của bạn bị thiếu trường x và bạn tạo một chỉ mục duy nhất trên x thì bạn không thể thêm tài liệu mới bỏ qua trường x. Điều này là do thiếu x trên hai tài liệu không phải là duy nhất

Sử dụng cùng một khái niệm này, bạn có thể đảm bảo tính duy nhất trên các lĩnh vực khác. Những thứ như email, tên người dùng, thẻ tín dụng, SSN, số điện thoại đều là những ứng cử viên sáng giá cho tính duy nhất

Làm cách nào để tạo một chỉ mục duy nhất trong MongoDB?

Tạo một chỉ mục duy nhất yêu cầu đặt cờ duy nhất thành true

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

Lưu ý cách {duy nhất. true} là một tùy chọn được chỉ định khi tạo bất kỳ chỉ mục nào

Bây giờ nếu bạn cố gắng thêm hai tài liệu có cùng giá trị cho email, bạn sẽ gặp lỗi Khóa trùng lặp

Lưu ý rằng nếu bộ sưu tập của bạn đã có các giá trị trùng lặp cho một trường mà bạn đang cố gắng tạo một chỉ mục duy nhất trên đó, nó cũng sẽ báo lỗi

Mặc dù ví dụ này minh họa việc thêm cờ duy nhất vào một chỉ mục trường đơn, nhưng bạn cũng có thể tạo một chỉ mục phức hợp duy nhất

db.getCollection('people').createIndex({email:1,user:1}, {unique:true})

Bây giờ nếu bạn cố gắng chèn hai tài liệu có cùng giá trị cho email VÀ người dùng, bạn sẽ gặp lỗi Khóa trùng lặp

Việc sử dụng @indexed trong khởi động mùa xuân là gì?

Chú thích @được lập chỉ mục sẽ thêm chỉ mục vào trường đó trong máy chủ mongo của bạn . Nó nhận một tham số chuỗi tùy chọn, sẽ là tên chỉ mục và không liên quan gì đến tên trường. Bạn chỉ nên lập chỉ mục những trường sẽ được sử dụng để lọc tài liệu.

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.

Làm cách nào để sử dụng DBRef trong MongoDB?

DBRef là các tham chiếu từ tài liệu này sang tài liệu khác bằng cách sử dụng giá trị của trường _id, tên bộ sưu tập của tài liệu đầu tiên và tùy chọn, tên cơ sở dữ liệu của nó, cũng như bất kỳ trường nào khác< . DBRefs cho phép bạn dễ dàng tham khảo các tài liệu được lưu trữ trong nhiều bộ sưu tập hoặc cơ sở dữ liệu. . DBRefs allow you to more easily reference documents stored in multiple collections or databases.

Việc sử dụng chú thích @document là gì?

@Document là một chú thích được cung cấp bởi dự án dữ liệu Spring. Nó được sử dụng để xác định một đối tượng miền, được duy trì trong MongoDB . Vì vậy, bạn có thể sử dụng nó để ánh xạ một lớp Java thành một bộ sưu tập bên trong MongoDB. Nếu bạn không sử dụng Spring Data thì không cần chú thích này.