Sửa đổi một tài liệu hiện có. Tham số truy vấn sử dụng cùng một bộ chọn truy vấn, như được sử dụng trong find() Show Các phương thức phổ biến của DBCollection
Phổ biến trong Java
Khi tôi bắt đầu làm việc với MongoDB và Java, tôi thường gặp phải khó khăn này trong việc chọn thao tác cập nhật chính xác trong số các phương thức khác nhau do MongoDB cung cấp. Ngay cả trong quá trình đánh giá Mã, tôi đã từng nhận được nhận xét từ người đánh giá đề xuất sử dụng cách nói, 'findAndModify()' thay vì 'updateMulti()'. Và những trải nghiệm này đã trở thành lý do để tôi viết bài này Ở đây chúng ta sẽ thảo luận về các loại hoạt động cập nhật khác nhau trong MongoDB và chúng khác nhau như thế nào Nguồn hình ảnh. FOSS Linux từ tìm kiếm của GoogleTôi đã sử dụng Java-8 với khung Spring-Boot để triển khai các trường hợp sử dụng có thể tìm thấy tại đây @ Github-MongoOperations Chúng tôi sẽ đánh giá tất cả các 'Hoạt động cập nhật' dựa trên năm tham số. Chúng tôi sẽ sử dụng một đối tượng tài liệu 'Thành phố' đơn giản để tương tác với cơ sở dữ liệu Mongo Tài liệu 'Thành phố' trong cơ sở dữ liệu MongoBây giờ chúng ta đã có bối cảnh, hãy đi sâu vào chủ đề của chúng ta tiết kiệm() phương thức save() không chấp nhận bất kỳ tham số hoặc tiêu chí nào để tìm tài liệu phải được cập nhật. Theo mặc định, nó sẽ cố gắng tìm tài liệu bằng cách sử dụng '_id' nếu được cung cấp cùng với đối tượng tài liệu Nếu tài liệu được tìm thấy, phương thức save() sẽ cập nhật tài liệu nếu không sẽ tạo một tài liệu mới phương thức save() trả về đối tượng tài liệu được cập nhật/mới tạo Nhược điểm của phương thức save() là chúng ta luôn phải cung cấp toàn bộ đối tượng Document làm tham số đầu vào ngay cả khi chúng ta chỉ muốn cập nhật 1 hoặc 2 trường trong số 20 trường. Có nghĩa là phương thức save() không cho phép cập nhật delta Phương pháp 'lưu' MongoTemplate. Phương thức 'save' của MongoRepository cũng được sử dụng theo cách tương tự. lưu tất cả()phương thức saveAll() hoàn toàn giống với phương thức save() ngoại trừ hai điều. Phương thức upsert() tương tự như phương thức save() ở chỗ nó cập nhật tài liệu nếu tìm thấy, nếu không thì sẽ tạo một tài liệu mới dựa trên dữ liệu được cung cấp Nhưng có một số khác biệt giữa phương thức upsert() và save(). upsert() trả về một đối tượng xác nhận chứa thông tin chi tiết về thao tác cập nhật như ‘upsertId’, ‘matchedCount’, ‘modifiedCount’ upsert() không chấp nhận toàn bộ đối tượng Tài liệu mà chỉ chấp nhận UpdateDefinition chứa thông tin chi tiết về tất cả các trường phải được cập nhật Chức năng này có ưu điểm và nhược điểm riêng Ưu điểm ở đây là chúng ta có thể thực hiện cập nhật delta. Có nghĩa là nếu một đối tượng chứa 20 trường, thì có thể cập nhật rõ ràng bất kỳ 2 hoặc 3 hoặc n số trường nào. Chúng tôi không cần cung cấp lại toàn bộ đối tượng Tài liệu để duy trì các thay đổi của mình Điều bất lợi ở đây là nếu không tìm thấy tài liệu nào cho một tiêu chí nhất định, thì upsert() sẽ tạo một đối tượng chỉ có các trường được cung cấp trong UpdateDefinition. Điều này có thể dẫn đến việc thêm dữ liệu không đầy đủ/bị hỏng vào cơ sở dữ liệu MongoTemplate Upsert methodfindAndModify()findAndModify() mang đến những gì tốt nhất của cả hai phương pháp upert() và save() Giống như phương thức upsert(), phương thức findAndModify() cũng chấp nhận tiêu chí trên các trường khác ngoài ‘_id’ để tìm tài liệu cần cập nhật. findAndModify() không chấp nhận toàn bộ đối tượng Tài liệu mà chỉ chấp nhận UpdateDefinition chứa thông tin chi tiết về tất cả các trường phải được cập nhật Giống như phương thức save(), phương thức findAndModify() trả về toàn bộ đối tượng tài liệu. Ngoài ra, chúng tôi có thể linh hoạt đề cập nếu chúng tôi muốn đối tượng tài liệu cũ, cập nhật trước hoặc đối tượng tài liệu mới, sau cập nhật làm giá trị trả về Chúng ta có thể chọn có muốn chèn tài liệu mới hay không nếu không tìm thấy tài liệu nào phù hợp với truy vấn tìm kiếm bằng cách cung cấp tùy chọn 'upsert(true)' cho phương thức findAndModify() MongoTemplate FindAndModify methodfindAndReplace()findAndReplace() cho phép chúng tôi tìm tài liệu bằng truy vấn trên bất kỳ trường nào. Chúng ta có thể chọn có muốn chèn tài liệu mới hay không nếu không tìm thấy tài liệu nào phù hợp với truy vấn tìm kiếm bằng cách cung cấp tùy chọn ‘upsert()’ để tìm và thay thế phương thức() Chúng tôi cũng có thể chọn xem chúng tôi có muốn tài liệu được cập nhật làm giá trị trả về hay không bằng cách cung cấp tùy chọn 'returnNew()' cho phương thức findAndReplace() Không thể cập nhật Delta vì chúng tôi cần cung cấp toàn bộ tài liệu được sử dụng để thay thế tài liệu hiện có MongoTemplate FindAndReplace methodupdateFirst()updateFirst() chấp nhận tiêu chí trên các trường khác ngoài ‘_id’ để tìm tài liệu cần cập nhật Chúng ta cũng có thể thực hiện cập nhật delta tại đây, như phương thức upert() Giống như phương thức upsert(), updateFirst() trả về một đối tượng xác nhận chứa thông tin chi tiết về hoạt động cập nhật như ‘upsertedId’, ‘matchedCount’, ‘modifiedCount’ Tuy nhiên, nếu không tìm thấy tài liệu phù hợp, nó sẽ không tạo tài liệu mới trong cơ sở dữ liệu dựa trên các trường được cung cấp trong UpdateDefinition Sự khác biệt duy nhất giữa updateFirst() và các hoạt động cập nhật delta khác là nó sẽ chỉ cập nhật tài liệu đầu tiên trong số tất cả các tài liệu phù hợp với tiêu chí cập nhật MongoTemplate Update Phương thức đầu tiênupdateMulti()updateMulti() hoàn toàn giống với updateFirst() ngoại trừ một điều. Không giống như updateFirst(), nó sẽ cập nhật tất cả các tài liệu phù hợp với tiêu chí cập nhật MongoTemplate UpdateMulti methodBulkOps Sử dụng UpdateOne()BulkOps Sử dụng UpdateOne() nhận một hoặc nhiều tham số đầu vào được sử dụng với các truy vấn riêng biệt. Chúng tôi cũng cần cung cấp UpdateDefinitions tương ứng với từng truy vấn tìm kiếm. Có nghĩa là, chúng tôi sẽ phải cung cấp 'Cặp' truy vấn tìm kiếm và UpdateDefinions để cho biết dữ liệu nào sẽ được cập nhật khi một truy vấn tìm kiếm cụ thể thỏa mãn. Tài liệu 'đầu tiên' đáp ứng từng truy vấn riêng lẻ sẽ được cập nhật Nếu không tìm thấy tài liệu phù hợp, nó sẽ không tạo tài liệu mới trong cơ sở dữ liệu dựa trên các trường được cung cấp trong UpdateDefinition Cập nhật cho tất cả các truy vấn là loại trừ lẫn nhau, tôi. e. một tài liệu không phải đáp ứng nhiều truy vấn Giống như phương thức updateFirst(), BulkOps Sử dụng UpdateOne() trả về một đối tượng xác nhận chứa thông tin chi tiết về thao tác cập nhật như ‘upsertedId’, ‘matchedCount’, ‘modifiedCount’ MongoTemplate BulkOps sử dụng phương thức UpdateOneBulkOps Sử dụng UpdateMulti()BulkOps Sử dụng UpdateMulti() hoàn toàn giống với BulkOps Sử dụng UpdateOne() ngoại trừ một điều. Không giống như BulkOps khi sử dụng UpdateOne(), nó sẽ cập nhật tất cả các tài liệu khớp với bất kỳ truy vấn nào từ tiêu chí cập nhật MongoDB cập nhật dữ liệu bằng ID như thế nào?Làm cách nào để cập nhật _id của Tài liệu MongoDB? . Bước 1. Ở bước đầu tiên, bạn cần lưu trữ ObjectId vào một biến Bước 2. Trong bước thứ hai, bạn cần đặt id mới Bước 3. Ở bước thứ ba, bạn cần chèn id mới vào tài liệu Bước 4. Ở bước thứ tư, bạn cần xóa id cũ Làm cách nào để cập nhật bản ghi trong MongoDB bằng Java?Bạn có thể cập nhật một tài liệu bằng cách sử dụng phương thức updateOne() trên đối tượng MongoCollection . Phương thức chấp nhận bộ lọc phù hợp với tài liệu bạn muốn cập nhật và câu lệnh cập nhật hướng dẫn trình điều khiển cách thay đổi tài liệu phù hợp.
Làm cách nào để tìm theo id trong MongoDB trong Java?Sử dụng Trình điều khiển Java
. Đ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”). 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. pass a Bson filter as a parameter to the find() method with the _id field to query. The above snippet would return vehicle collection document where the _id equals ObjectId(“62d01d17cdd1b7c8a5f945b9”). The above query returns all vehicle collection documents for the queried IDs.
Làm cách nào để cập nhật nhiều trường trong MongoDB trong Java?Cập nhật nhiều trường của một tài liệu. Chúng ta có thể sử dụng toán tử $set và $inc để cập nhật bất kỳ trường nào trong MongoDB . Toán tử $set sẽ đặt giá trị mới được chỉ định trong khi toán tử $inc sẽ tăng giá trị theo một giá trị đã chỉ định. |