Java mongodb cập nhật theo id

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()

Các phương thức phổ biến của DBCollection

  • tìm thấy

    Chọn tài liệu trong bộ sưu tập và đưa con trỏ đến tài liệu đã chọn

  • chèn

    Chèn tài liệu vào bộ sưu tập. Nếu bộ sưu tập không tồn tại trên máy chủ, thì nó sẽ là

  • tìm một

    Nhận một tài liệu từ bộ sưu tập của '_id'

  • gỡ bỏ

    Xóa tài liệu khỏi bộ sưu tập

  • tiết kiệm

    Cập nhật tài liệu hiện có hoặc chèn tài liệu tùy thuộc vào tham số. Nếu tài liệu không có

  • đếm

    Nhận số lượng tài liệu trong bộ sưu tập phù hợp với tiêu chí

  • tạo Index

    Buộc tạo chỉ mục tăng dần trên một trường với các tùy chọn mặc định

  • rơi vãi

    Bỏ (xóa) bộ sưu tập này khỏi cơ sở dữ liệu. Sử dụng cẩn thận

  • findAndModify

    Sửa đổi nguyên tử và trả lại một tài liệu. Theo mặc định, tài liệu trả về không bao gồm t

  • getName

    Lấy tên của một bộ sưu tập

  • getDB

    Trả về cơ sở dữ liệu mà bộ sưu tập này là thành viên của

  • getIndexInfo

    Trả về danh sách các chỉ mục cho bộ sưu tập này. Mỗi đối tượng trong danh sách là "tài liệu thông tin" từ

  • lấyDB,
  • lấy IndexInfo,
  • đảm bảo Index,
  • tổng hợp,
  • getFullName,
  • riêng biệt,
  • getCount,
  • getStats,
  • thiết lậpViếtMối quan tâm

Phổ biến trong Java

  • Tạo tài liệu JSON từ các lớp java bằng gson
  • so sánh với (BigDecimal)
  • putExtra (Ý định)
  • orElseThrow (Tùy chọn)

    Trả về giá trị được chứa, nếu có, nếu không, hãy ném một ngoại lệ được tạo bởi s được cung cấp

  • FlowLayout (java. awt)

    Bố cục luồng sắp xếp các thành phần theo luồng từ trái sang phải, giống như các dòng văn bản trong một đoạn văn. F

  • Nhân (java. awt. ảnh)
  • Proxy (java. mạng)

    Lớp này đại diện cho cài đặt máy chủ proxy. Một phiên bản được tạo của Proxy lưu trữ một loại và một địa chỉ

  • Bộ sắp xếp (java. sử dụng)

    SortedSet là Set lặp qua các phần tử của nó theo thứ tự đã sắp xếp. Thứ tự được xác định

  • ConcurrentHashMap (java. sử dụng. đồng thời)

    Một plug-in thay thế cho JDK1. 5 java. sử dụng. đồng thời. ConcurrentHashMap. Phiên bản này dựa trên hoặc

  • Bộ lọc (javax. máy chủ)

    Bộ lọc là một đối tượng thực hiện các tác vụ lọc theo yêu cầu đối với tài nguyên (một servlet o

  • Từ CI đến AI. Lớp AI trong tổ chức của bạn

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 Google

Tô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ố.
1. Tiêu chí tìm kiếm
2. Giá trị cập nhật đầu vào (Toàn bộ tài liệu HOẶC Định nghĩa cập nhật)
3. Giá trị trả về (Toàn bộ tài liệu HOẶC Cập nhật thống kê kết quả)
4. Hành vi mặc định nếu không tìm thấy (các) tài liệu phù hợp.
(Chèn/Không chèn/Linh hoạt)
5. Cập nhật đồng bằng

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 Mongo

Bâ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.

Thay vì một đối tượng tài liệu, nó nhận một tập hợp các đối tượng tài liệu như List

nâng cấp ()

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().
Không giống như phương thức save(), upsert() 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.

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.

Chúng ta cũng có thể cập nhật delta tại đây, giống như phương thức upsert().

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.
Sau khi tài liệu được tìm thấy, nó sẽ thay thế tài liệu đó bằng tài liệu mới mà chúng tôi đã cung cấp trong yêu cầu.

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.

Điều này cũng ngụ ý rằng tất cả các thao tác Cập nhật hàng loạt đều là cập nhật delta và không giống như các phương thức save() và findAndReplace(), nó không chấp nhận toàn bộ tài liệu làm đầu vào.

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.