Hướng dẫn mongodb java driver options - tùy chọn trình điều khiển java mongodb

Bạn hiện đang xem phiên bản cũ hơn của tài liệu trình điều khiển Java. Đối với phiên bản gần đây nhất của tài liệu tham khảo, hãy xem trang web tài liệu trình điều khiển Java MongoDB của chúng tôi.
For the most recent version of the reference documentation, see our MongoDB Java Driver documentation site.

Tài liệu lái xe Java MongoDB

Chào mừng bạn đến với trung tâm tài liệu trình điều khiển Java MongoDB cho bản phát hành trình điều khiển 3.9.

Những gì mới trong 3.9

Đối với các tính năng mới chính của 3.9, hãy xem những gì mới.

Nâng cấp

Để nâng cấp, tham khảo tài liệu xem xét nâng cấp.

Trình điều khiển MongoDB

Đối với trình điều khiển MongoDB đồng bộ, xem phần Trình điều khiển MongoDB.

Trình điều khiển Async MongoDB

Đối với trình điều khiển Async không đồng bộ mới, phần trình điều khiển Async MongoDB.

Thư viện BSON

Thư viện BSON hỗ trợ toàn diện thông số kỹ thuật BSON, định dạng lưu trữ dữ liệu và chuyển giao mạng mà MongoDB sử dụng cho các tài liệu trên mạng. Hướng dẫn tham khảo cung cấp thông tin về việc làm việc với các tài liệu, cách sử dụng codec và hỗ trợ JSON mở rộng.

Chào mừng bạn đến với trang web tài liệu cho người lái xe Java, người lái xe MongoDB chính thức cho các ứng dụng Java đồng bộ. Tải xuống bằng Maven hoặc Gradle hoặc thiết lập một dự án có thể chạy bằng cách làm theo hướng dẫn bắt đầu nhanh của chúng tôi.Maven or Gradle, or set up a runnable project by following our Quick Start guide.

Tìm hiểu cách thiết lập kết nối với MongoDB Atlas và bắt đầu làm việc với dữ liệu trong phần Bắt đầu nhanh.

Xem các ví dụ về cú pháp trình điều khiển cho các lệnh MongoDB thông thường trong phần tham chiếu nhanh.

Để biết các đoạn mã và giải thích mã hoàn toàn có thể chạy được cho các phương pháp phổ biến, hãy xem phần Ví dụ sử dụng.

Tìm hiểu cách thực hiện các tác vụ sau bằng trình điều khiển Java trong phần Nguyên tắc cơ bản:

  • Kết nối với MongoDB

  • Sử dụng API ổn định

  • Xác thực với MongoDB

  • Chuyển đổi giữa các định dạng dữ liệu MongoDB và các đối tượng Java

  • Đọc và viết cho MongoDB

  • Đơn giản hóa mã của bạn với các nhà xây dựng

  • Chuyển đổi dữ liệu của bạn

  • Tạo các chỉ mục để tăng tốc các truy vấn

  • Sắp xếp bằng cách sử dụng đối chiếu

  • Nhật ký các sự kiện trong trình điều khiển

  • Giám sát các sự kiện trình điều khiển

  • Lưu trữ và truy xuất các tệp lớn trong MongoDB

  • Mã hóa các trường trong tài liệu

  • Sử dụng bộ sưu tập chuỗi thời gian

Tài liệu API trình điều khiển Java MongoDB chứa một số thư viện được tổ chức bởi chức năng. Để biết thông tin chi tiết về các lớp và phương thức trong mỗi thư viện, hãy xem bảng sau đây để biết mô tả và liên kết của họ đến tài liệu API.

Để biết câu trả lời cho các câu hỏi thường gặp về trình điều khiển Java MongoDB, hãy xem phần Câu hỏi thường gặp (Câu hỏi thường gặp).

Tìm hiểu cách báo cáo lỗi, đóng góp cho người lái xe và tìm thêm tài nguyên để đặt câu hỏi và nhận trợ giúp trong phần Các vấn đề & Trợ giúp.

Để biết các biểu đồ tương thích hiển thị phiên bản trình điều khiển Java được đề xuất cho mỗi phiên bản máy chủ MongoDB, hãy xem phần Tương thích.

Để biết danh sách các tính năng và thay đổi mới trong mỗi phiên bản, hãy xem phần mới.

Tìm hiểu những thay đổi bạn có thể cần thực hiện cho ứng dụng của mình để nâng cấp các phiên bản trình điều khiển trong phần phiên bản trình điều khiển nâng cấp.

Tìm hiểu những thay đổi bạn có thể cần thực hiện cho ứng dụng của mình để di chuyển từ API Legacy sang API hiện tại trong phần Di chuyển từ phần API Legacy.

Ghé thăm Trung tâm phát triển và Đại học MongoDB để tìm hiểu thêm về người lái xe Java MongoDB.

Trung tâm phát triển cung cấp các hướng dẫn và sự tham gia xã hội cho các nhà phát triển.

Để tìm hiểu cách sử dụng các tính năng MongoDB với trình điều khiển Java, hãy xem trang Cách thức và bài viết.How To's and Articles page.

Để đặt câu hỏi và tham gia vào các cuộc thảo luận với các nhà phát triển đồng nghiệp sử dụng trình điều khiển Java, hãy xem trang Diễn đàn.forums page.

Đại học MongoDB cung cấp các khóa học miễn phí để dạy mọi người cách sử dụng MongoDB.

Cập nhật

Ngày 25 tháng 3 năm 2021

  • Cập nhật trình điều khiển Java lên 4.2.2.

  • Đã thêm ví dụ mã hóa trường bên khách hàng.

Ngày 21 tháng 10 năm 2020

  • Cập nhật trình điều khiển Java lên 4.1.1.

  • Ghi nhật ký trình điều khiển Java MongoDB hiện được bật thông qua API SLF4J phổ biến vì vậy tôi đã thêm logback trong pom.xml và tệp cấu hình logback.xml.SLF4J API so I added logback in the pom.xml and a configuration file logback.xml.

Giới thiệu

Hướng dẫn mongodb java driver options - tùy chọn trình điều khiển java mongodb

Trong bài đăng trên blog đầu tiên này của Sê -ri Bắt đầu nhanh Java, tôi sẽ chỉ cho bạn cách thiết lập dự án Java của bạn với Maven và thực hiện lệnh MongoDB trong Java. Sau đó, chúng tôi sẽ khám phá các hoạt động phổ biến nhất - chẳng hạn như tạo, đọc, cập nhật và xóa - sử dụng trình điều khiển Java MongoDB. Tôi cũng sẽ cho bạn thấy một số tùy chọn và tính năng mạnh mẽ hơn có sẵn như là một phần của trình điều khiển Java MongoDB cho mỗi hoạt động này, cung cấp cho bạn một nền tảng kiến ​​thức thực sự tuyệt vời để xây dựng khi chúng tôi trải qua loạt phim.MongoDB Java driver. I will also show you some of the more powerful options and features available as part of the MongoDB Java driver for each of these operations, giving you a really great foundation of knowledge to build upon as we go through the series.

Trong các bài đăng trên blog trong tương lai, chúng tôi sẽ tiếp tục và làm việc thông qua:

  • Giao dịch axit đa tài liệu.

  • Trình điều khiển dòng phản ứng Java MongoDB.

Tại sao MongoDB và Java?

Điều kiện tiên quyết

Để làm theo, bạn có thể sử dụng bất kỳ môi trường nào bạn thích và môi trường phát triển tích hợp mà bạn chọn. Tôi sẽ sử dụng Maven 3.6.2 và Java OpenJDK 13, nhưng tất cả các mã sẽ tương thích với các phiên bản Java 8 đến 13, vì vậy hãy sử dụng JDK của sự lựa chọn của bạn và cập nhật phiên bản Java phù hợp trong tệp pom.xml Chúng tôi sắp thiết lập.Maven 3.6.2 and the Java OpenJDK 13, but all the code will be compatible with Java versions 8 to 13, so feel free to use the JDK of your choice and update the Java version accordingly in the pom.xml file we are about to set up.

Nhận cụm M0 miễn phí của bạn trên MongoDB Atlas ngay hôm nay. Nó miễn phí mãi mãi và bạn sẽ có thể sử dụng nó để làm việc với các ví dụ trong loạt blog này.MongoDB Atlas today. It's free forever, and you'll be able to use it to work with the examples in this blog series.

Hãy nhảy vào và xem xét Java và MongoDB hoạt động tốt như thế nào.

Được thiết lập

Để bắt đầu, chúng tôi sẽ cần thiết lập một dự án Maven mới. Bạn có hai tùy chọn tại thời điểm này. Bạn có thể sao chép kho lưu trữ Git của loạt bài này hoặc bạn có thể tạo và thiết lập dự án Maven.

Sử dụng kho lưu trữ Git

Nếu bạn chọn sử dụng Git, bạn sẽ nhận được tất cả mã ngay lập tức. Tôi vẫn khuyên bạn nên đọc qua thiết lập thủ công.

Bạn có thể sao chép kho lưu trữ nếu bạn thích với lệnh sau.

Thiết lập thủ công

Bạn có thể sử dụng IDE yêu thích của mình để tạo dự án Maven mới cho bạn hoặc bạn có thể tạo Dự án Maven theo cách thủ công. Dù bằng cách nào, bạn nên lấy kiến ​​trúc thư mục sau:

Tệp pom.xml phải chứa mã sau:

Để xác minh rằng mọi thứ hoạt động chính xác, bạn sẽ có thể tạo và chạy một "Xin chào MongoDB đơn giản!" chương trình. Trong src/main/java/com/mongodb/quickstart, hãy tạo tệp HelloMongoDB.java:src/main/java/com/mongodb/quickstart, create the HelloMongoDB.java file:

Sau đó biên dịch và thực thi nó với IDE của bạn hoặc sử dụng dòng lệnh trong thư mục gốc (trong đó thư mục src):src folder is):

Kết quả sẽ trông như thế này:

Lưu ý: Nếu bạn thấy một số cảnh báo về quyền truy cập phản xạ bất hợp pháp từ guice.java, thì việc bỏ qua chúng là an toàn. Guice được Maven sử dụng và cần cập nhật. Bạn có thể đọc thêm về nó trong vấn đề GitHub này. Những cảnh báo này sẽ biến mất trong một bản phát hành trong tương lai của Guice và Maven.guice.java, it's safe to ignore them. Guice is used by Maven and needs an update. You can read more about it in this GitHub issue. These warnings will disappear in a future release of Guice and Maven.

Kết nối với Java

Bây giờ, dự án Maven của chúng tôi hoạt động và chúng tôi đã giải quyết các phụ thuộc của mình, chúng tôi có thể bắt đầu sử dụng Atlas MongoDB với Java.

Nếu bạn đã nhập bộ dữ liệu mẫu như được đề xuất trong bài đăng blog Atlas bắt đầu nhanh, thì với mã Java mà chúng tôi sắp tạo, bạn sẽ có thể thấy một danh sách các cơ sở dữ liệu trong bộ dữ liệu mẫu.sample dataset as suggested in the Quick Start Atlas blog post, then with the Java code we are about to create, you will be able to see a list of the databases in the sample dataset.

Bước đầu tiên là khởi tạo MongoClient bằng cách chuyển chuỗi kết nối Atlas MongoDB vào phương thức tĩnh MongoClients.create(). Điều này sẽ thiết lập kết nối với MongoDB Atlas bằng chuỗi kết nối. Sau đó, chúng ta có thể truy xuất danh sách các cơ sở dữ liệu trên cụm này và in chúng ra để kiểm tra kết nối với MongoDB.MongoClient by passing a MongoDB Atlas connection string into the MongoClients.create() static method. This will establish a connection to MongoDB Atlas using the connection string. Then we can retrieve the list of databases on this cluster and print them out to test the connection with MongoDB.

Trong src/main/java/com/mongodb, hãy tạo tệp Connection.java:src/main/java/com/mongodb, create the Connection.java file:

Như bạn có thể thấy, chuỗi kết nối MongoDB được lấy từ các thuộc tính hệ thống, vì vậy chúng tôi cần thiết lập điều này. Khi bạn đã truy xuất chuỗi kết nối Atlas MongoDB của mình, bạn có thể thêm thuộc tính hệ thống logback.xml0 vào IDE của bạn. Đây là cấu hình của tôi với IntelliJ chẳng hạn.System Properties, so we need to set this up. Once you have retrieved your MongoDB Atlas connection string, you can add the logback.xml0 system property into your IDE. Here is my configuration with IntelliJ for example.

Hướng dẫn mongodb java driver options - tùy chọn trình điều khiển java mongodb
Cấu hình Intellij

Hoặc nếu bạn thích sử dụng maven trong dòng lệnh, đây là dòng lệnh tương đương bạn có thể chạy trong thư mục gốc:

Lưu ý: Đừng quên các trích dẫn kép xung quanh URI MongoDB để tránh những bất ngờ từ vỏ của bạn.

Đầu ra tiêu chuẩn sẽ trông như thế này:

Chèn hoạt động

Được thiết lập

Trong phần Kết nối với Java, chúng tôi đã tạo các lớp logback.xml1 và logback.xml2. Bây giờ chúng tôi sẽ làm việc trên lớp logback.xml3.logback.xml1 and logback.xml2. Now we will work on the logback.xml3 class.

Nếu bạn không thiết lập cụm miễn phí của mình trên MongoDB Atlas, thì bây giờ là thời điểm tuyệt vời để làm điều đó. Nhận các hướng dẫn để tạo cụm của bạn.creating your cluster.

Kiểm tra mô hình thu thập và dữ liệu

Trong bộ dữ liệu mẫu, bạn có thể tìm thấy cơ sở dữ liệu logback.xml4, chứa bộ sưu tập logback.xml5. Mỗi tài liệu trong bộ sưu tập này thể hiện điểm số của một học sinh cho một lớp cụ thể.logback.xml4, which contains a collection logback.xml5. Each document in this collection represents a student's grades for a particular class.

Đây là đại diện JSON của một tài liệu trong vỏ Mongo.mongo shell.

Như bạn có thể thấy, MongoDB lưu trữ các tài liệu BSON và cho mỗi cặp giá trị khóa, BSON chứa khóa và giá trị cùng với loại của nó. Đây là cách MongoDB biết rằng logback.xml6 thực sự là một đôi và không phải là một số nguyên, không rõ ràng trong biểu diễn vỏ Mongo của tài liệu này.logback.xml6 is actually a double and not an integer, which is not explicit in the mongo shell representation of this document.

Chúng tôi có 10.000 sinh viên (logback.xml7 từ 0 đến 9999) đã có trong bộ sưu tập này và mỗi người trong số họ đã tham gia 10 lớp khác nhau, trong đó có thêm tới 100.000 tài liệu trong bộ sưu tập này. Giả sử một sinh viên mới (logback.xml7 10.000) vừa đến trường đại học này và nhận được một loạt các lớp (ngẫu nhiên) trong lớp đầu tiên của mình. Hãy chèn tài liệu sinh viên mới này bằng Java và Trình điều khiển Java MongoDB.logback.xml7 from 0 to 9999) already in this collection and each of them took 10 different classes, which adds up to 100,000 documents in this collection. Let's say a new student (logback.xml7 10,000) just arrived in this university and received a bunch of (random) grades in his first class. Let's insert this new student document using Java and the MongoDB Java driver.

Trong trường đại học này, logback.xml6 thay đổi từ 0 đến 500, vì vậy tôi có thể sử dụng bất kỳ giá trị ngẫu nhiên nào từ 0 đến 500.logback.xml6 varies from 0 to 500, so I can use any random value between 0 and 500.

Chọn cơ sở dữ liệu và bộ sưu tập

Đầu tiên, chúng tôi cần thiết lập lớp logback.xml3 của mình và truy cập vào bộ sưu tập src/main/java/com/mongodb/quickstart1 này.logback.xml3 class and access this src/main/java/com/mongodb/quickstart1 collection.

Tạo tài liệu BSON

Thứ hai, chúng ta cần đại diện cho học sinh mới này trong Java bằng lớp src/main/java/com/mongodb/quickstart2.src/main/java/com/mongodb/quickstart2 class.

Như bạn có thể thấy, chúng tôi đã sao chép cùng một mô hình dữ liệu từ các tài liệu hiện có trong bộ sưu tập này khi chúng tôi đảm bảo rằng logback.xml7, logback.xml6 và src/main/java/com/mongodb/quickstart5 đều tăng gấp đôi.logback.xml7, logback.xml6, and src/main/java/com/mongodb/quickstart5 are all doubles.

Ngoài ra, trình điều khiển Java sẽ tạo ra trường src/main/java/com/mongodb/quickstart6 với một ObjectID cho chúng tôi nếu chúng tôi không tạo ra một điều rõ ràng ở đây, nhưng đó là cách thực hành tốt để tự đặt ra ____26. Điều này sẽ không thay đổi cuộc sống của chúng tôi ngay bây giờ, nhưng nó có ý nghĩa hơn khi chúng tôi trực tiếp thao tác với Pojos và chúng tôi muốn tạo API REST sạch. Tôi đang làm điều này trong bài viết bản đồ của mình.src/main/java/com/mongodb/quickstart6 field with an ObjectId for us if we didn't explicitly create one here, but it's good practice to set the src/main/java/com/mongodb/quickstart6 ourselves. This won't change our life right now, but it makes more sense when we directly manipulate POJOs and we want to create a clean REST API. I'm doing this in my mapping POJOs post.

Cũng lưu ý rằng chúng tôi đang chèn một tài liệu vào một bộ sưu tập và cơ sở dữ liệu hiện có, nhưng nếu những điều này đã tồn tại, MongoDB sẽ tự động tạo chúng ngay lần đầu tiên bạn đi chèn một tài liệu vào bộ sưu tập.

Chèn tài liệu

Cuối cùng, chúng ta có thể chèn tài liệu này.

Mã cuối cùng để chèn một tài liệu

Dưới đây là lớp logback.xml3 cuối cùng để chèn một tài liệu vào MongoDB với tất cả các chi tiết tôi đã đề cập ở trên.logback.xml3 class to insert one document in MongoDB with all the details I mentioned above.

Bạn có thể thực hiện lớp này với dòng lệnh maven sau trong thư mục gốc hoặc sử dụng IDE của bạn (xem ở trên để biết thêm chi tiết). Đừng quên các trích dẫn kép xung quanh URI MongoDB để tránh những bất ngờ.

Lưu ý rằng thứ tự của các trường khác với tài liệu ban đầu với src/main/java/com/mongodb/quickstart9.src/main/java/com/mongodb/quickstart9.

Chúng tôi có thể nhận được chính xác cùng một đơn đặt hàng nếu chúng tôi muốn bằng cách tạo tài liệu như thế này.

Nhưng nếu bạn làm mọi thứ một cách chính xác, điều này không có bất kỳ tác động nào đến mã và logic của bạn vì các trường trong tài liệu JSON không được đặt hàng.

Một đối tượng là một tập hợp các cặp tên/giá trị không được đặt hàng.

Chèn nhiều tài liệu

Bây giờ chúng ta đã biết cách tạo một tài liệu, hãy tìm hiểu cách chèn nhiều tài liệu.

Tất nhiên, chúng tôi chỉ có thể bọc hoạt động HelloMongoDB.java0 trước đó thành vòng lặp HelloMongoDB.java1. Thật vậy, nếu chúng ta lặp 10 lần trên phương thức này, chúng ta sẽ gửi 10 lệnh chèn vào cụm và mong đợi 10 xác nhận chèn. Như bạn có thể tưởng tượng, điều này sẽ không hiệu quả lắm vì nó sẽ tạo ra nhiều thông tin liên lạc TCP hơn mức cần thiết.HelloMongoDB.java0 operation into a HelloMongoDB.java1 loop. Indeed, if we loop 10 times on this method, we would send 10 insert commands to the cluster and expect 10 insert acknowledgments. As you can imagine, this would not be very efficient as it would generate a lot more TCP communications than necessary.

Thay vào đó, chúng tôi muốn bọc 10 tài liệu của chúng tôi và gửi chúng trong một cuộc gọi đến cụm và chúng tôi chỉ muốn nhận được một xác nhận chèn cho toàn bộ danh sách.

Hãy tái cấu trúc mã. Đầu tiên, hãy làm cho Trình tạo ngẫu nhiên trở thành trường HelloMongoDB.java2.HelloMongoDB.java2 field.

Hãy làm một phương pháp nhà máy lớp.

Và bây giờ chúng ta có thể sử dụng điều này để chèn 10 tài liệu cùng một lúc.

Như bạn có thể thấy, chúng tôi hiện đang gói các tài liệu lớp của chúng tôi vào một danh sách và chúng tôi đang gửi danh sách này trong một cuộc gọi duy nhất với phương thức HelloMongoDB.java3.HelloMongoDB.java3 method.

Theo mặc định, phương thức HelloMongoDB.java3 sẽ chèn các tài liệu theo thứ tự và dừng nếu xảy ra lỗi trong quá trình. Ví dụ: nếu bạn cố gắng chèn một tài liệu mới có cùng src/main/java/com/mongodb/quickstart6 dưới dạng tài liệu hiện có, bạn sẽ nhận được HelloMongoDB.java6.HelloMongoDB.java3 method will insert the documents in order and stop if an error occurs during the process. For example, if you try to insert a new document with the same src/main/java/com/mongodb/quickstart6 as an existing document, you would get a HelloMongoDB.java6.

Do đó, với HelloMongoDB.java3 được đặt hàng, các tài liệu cuối cùng của danh sách sẽ không được chèn và quá trình chèn sẽ dừng và trả về ngoại lệ thích hợp ngay khi xảy ra lỗi.HelloMongoDB.java3, the last documents of the list would not be inserted and the insertion process would stop and return the appropriate exception as soon as the error occurs.

Như bạn có thể thấy ở đây, đây không phải là hành vi chúng tôi muốn bởi vì tất cả các lớp hoàn toàn độc lập từ người này sang cái khác. Vì vậy, nếu một trong số họ thất bại, chúng tôi muốn xử lý tất cả các lớp và sau đó quay trở lại một ngoại lệ cho những người thất bại.

Đây là lý do tại sao bạn thấy tham số thứ hai HelloMongoDB.java8 là đúng theo mặc định.HelloMongoDB.java8 which is true by default.

Mã cuối cùng để chèn nhiều tài liệu

Hãy tái cấu trúc mã một chút và đây là lớp logback.xml3 cuối cùng.logback.xml3 class.

Một lời nhắc nhở, mọi hoạt động ghi (tạo, thay thế, cập nhật, xóa) được thực hiện trên một tài liệu là axit trong MongoDB. Điều đó có nghĩa là HelloMongoDB.java3 không phải là axit theo mặc định, nhưng, tin tốt, vì MongoDB 4.0, chúng ta có thể kết thúc cuộc gọi này trong một giao dịch axit đa tài liệu để làm cho nó hoàn toàn axit. Tôi giải thích điều này chi tiết hơn trong blog của tôi về các giao dịch axit đa tài liệu.single document is ACID in MongoDB. Which means HelloMongoDB.java3 is not ACID by default but, good news, since MongoDB 4.0, we can wrap this call in a multi-document ACID transaction to make it fully ACID. I explain this in more detail in my blog about multi-document ACID transactions.

Đọc tài liệu

Tạo dữ liệu

Chúng tôi đã tạo ra lớp logback.xml3. Bây giờ chúng tôi sẽ làm việc trong lớp src2.logback.xml3. Now we will work in the src2 class.

Chúng tôi đã viết 11 lớp mới, một cho học sinh có src3 và 10 cho học sinh với src4 trong bộ sưu tập src/main/java/com/mongodb/quickstart1.src3 and 10 for the student with src4 in the src/main/java/com/mongodb/quickstart1 collection.

Một lời nhắc nhở, đây là các lớp của src3.src3.

Chúng tôi cũng đã thảo luận về các loại BSON và chúng tôi lưu ý rằng logback.xml7 và logback.xml6 là nhân đôi.logback.xml7 and logback.xml6 are doubles.

MongoDB coi một số loại tương đương với mục đích so sánh. Ví dụ, các loại số trải qua chuyển đổi trước khi so sánh.

Vì vậy, đừng ngạc nhiên nếu tôi lọc với số nguyên và khớp một tài liệu có chứa số kép chẳng hạn. Nếu bạn muốn lọc tài liệu theo các loại giá trị, bạn có thể sử dụng toán tử $ type.$type operator.

Đọc một tài liệu cụ thể

Hãy đọc tài liệu ở trên. Để đạt được điều này, chúng tôi sẽ sử dụng phương pháp src9, chuyển nó một bộ lọc để giúp xác định tài liệu chúng tôi muốn tìm.src9, passing it a filter to help identify the document we want to find.

Vui lòng tạo lớp src2 trong gói guice.java1 với mã này:src2 in the guice.java1 package with this code:

Ngoài ra, hãy đảm bảo bạn thiết lập logback.xml0 trong các thuộc tính hệ thống của mình bằng IDE của bạn nếu bạn muốn chạy mã này trong IDE yêu thích của bạn.logback.xml0 in your system properties using your IDE if you want to run this code in your favorite IDE.

Ngoài ra, bạn có thể sử dụng dòng lệnh Maven này trong dự án gốc của mình (nơi thư mục src):src folder is):

Đầu ra tiêu chuẩn phải là:

Người lái xe MongoDB đi kèm với một vài người trợ giúp để giảm bớt việc viết các truy vấn này. Đây là một truy vấn tương đương bằng phương pháp guice.java4.guice.java4 method.

Tất nhiên, tôi đã sử dụng nhập tĩnh để làm cho mã nhỏ gọn và dễ đọc nhất có thể.

Đọc một loạt các tài liệu

Trong ví dụ trước, lợi ích của những người trợ giúp này là không rõ ràng, nhưng hãy để tôi chỉ cho bạn một ví dụ khác trong đó tôi đang tìm kiếm tất cả các lớp với Student_id lớn hơn hoặc bằng 10.000.student_id greater than or equal to 10,000.

Như bạn có thể thấy, tôi đang sử dụng toán tử guice.java5 để viết truy vấn này. Bạn có thể tìm hiểu về tất cả các toán tử truy vấn khác nhau trong tài liệu MongoDB.guice.java5 operator to write this query. You can learn about all the different query operators in the MongoDB documentation.

Trình lặp

Phương thức src9 trả về một đối tượng thực hiện giao diện guice.java7, cuối cùng mở rộng giao diện guice.java8 để chúng tôi có thể sử dụng trình lặp để đi qua danh sách các tài liệu chúng tôi đang nhận từ MongoDB:src9 method returns an object that implements the interface guice.java7, which ultimately extends the guice.java8 interface so we can use an iterator to go through the list of documents we are receiving from MongoDB:

Danh sách

Danh sách thường dễ thao tác hơn so với trình lặp, vì vậy chúng tôi cũng có thể làm điều này để truy xuất trực tiếp một guice.java9:guice.java9:

Người tiêu dùng

Chúng tôi cũng có thể sử dụng MongoClient0 là giao diện chức năng:MongoClient0 which is a functional interface:

Con trỏ, sắp xếp, bỏ qua, giới hạn và dự đoán

Như chúng ta đã thấy ở trên với ví dụ MongoClient1, MongoDB tận dụng con trỏ để lặp lại thông qua bộ kết quả của bạn.MongoClient1 example, MongoDB leverages cursors to iterate through your result set.

Nếu bạn đã quen thuộc với các con trỏ trong vỏ Mongo, bạn sẽ biết rằng các phép biến đổi có thể được áp dụng cho nó. Một con trỏ có thể được sắp xếp và các tài liệu mà nó chứa có thể được chuyển đổi bằng cách sử dụng một hình chiếu. Ngoài ra, một khi con trỏ được sắp xếp, chúng ta có thể chọn bỏ qua một vài tài liệu và giới hạn số lượng tài liệu trong đầu ra. Điều này rất hữu ích để thực hiện phân trang trong frontend của bạn chẳng hạn.mongo shell, you know that transformations can be applied to it. A cursor can be sorted and the documents it contains can be transformed using a projection. Also, once the cursor is sorted, we can choose to skip a few documents and limit the number of documents in the output. This is very useful to implement pagination in your frontend for example.

Hãy kết hợp mọi thứ chúng ta đã học trong một truy vấn:

Đây là đầu ra chúng tôi nhận được:

Hãy nhớ rằng các tài liệu được trả về theo thứ tự tự nhiên, vì vậy nếu bạn muốn đặt hàng đầu ra của mình, bạn cần sắp xếp con trỏ của mình để đảm bảo không có sự ngẫu nhiên trong thuật toán của bạn.natural order, so if you want your output ordered, you need to sort your cursors to make sure there is no randomness in your algorithm.

Chỉ mục

Nếu bạn muốn thực hiện các truy vấn này (có hoặc không sắp xếp) hiệu quả, bạn sẽ IndelIndexes!you needindexes!

Để làm cho truy vấn cuối cùng của tôi hiệu quả, tôi nên tạo chỉ mục này:

Khi tôi chạy giải thích về truy vấn này, đây là kế hoạch chiến thắng tôi nhận được:explain on this query, this is the winning plan I get:

Với chỉ mục này, chúng ta có thể thấy rằng chúng ta không có giai đoạn sắp xếp, vì vậy chúng ta không thực hiện một loại trong bộ nhớ vì các tài liệu đã được sắp xếp "miễn phí" và được trả về theo thứ tự của chỉ mục.SORT stage, so we are not doing a sort in memory as the documents are already sorted "for free" and returned in the order of the index.

Ngoài ra, chúng ta có thể thấy rằng chúng ta không có bất kỳ giai đoạn tìm nạp nào, vì vậy đây là một truy vấn được bảo hiểm, loại truy vấn hiệu quả nhất mà bạn có thể chạy trong MongoDB. Thật vậy, tất cả các thông tin chúng tôi đang trả lại ở cuối đã có trong chỉ mục, vì vậy bản thân chỉ mục chứa mọi thứ chúng tôi cần để trả lời truy vấn này.FETCH stage, so this is a covered query, the most efficient type of query you can run in MongoDB. Indeed, all the information we are returning at the end is already in the index, so the index itself contains everything we need to answer this query.

Mã cuối cùng để đọc tài liệu

Cập nhật tài liệu

Cập nhật một tài liệu

Hãy chỉnh sửa tài liệu với MongoClient2. Để đạt được điều này, chúng tôi sẽ sử dụng phương pháp MongoClient3.MongoClient2. To achieve this, we will use the method MongoClient3.

Vui lòng tạo lớp MongoClient4 trong gói guice.java1 với mã này:MongoClient4 in the guice.java1 package with this code:

Như bạn có thể thấy trong ví dụ này, phương thức MongoClient3 lấy hai tham số:MongoClient3 takes two parameters:

  • Đầu tiên là bộ lọc xác định tài liệu chúng tôi muốn cập nhật.

  • Cái thứ hai là hoạt động cập nhật. Ở đây, chúng tôi đang thiết lập một trường mới MongoClient7 với giá trị MongoClient8.MongoClient7 with the value MongoClient8.

Để chạy chương trình này, hãy đảm bảo bạn thiết lập logback.xml0 trong các thuộc tính hệ thống của mình bằng IDE của bạn nếu bạn muốn chạy mã này trong IDE yêu thích của bạn (xem ở trên để biết thêm chi tiết).logback.xml0 in your system properties using your IDE if you want to run this code in your favorite IDE (see above for more details).

Ngoài ra, bạn có thể sử dụng dòng lệnh Maven này trong dự án gốc của mình (nơi thư mục src):src folder is):

Đầu ra tiêu chuẩn sẽ trông như thế này:

Upsert một tài liệu

UPSERT là sự pha trộn giữa hoạt động chèn và bản cập nhật. Nó xảy ra khi bạn muốn cập nhật một tài liệu, giả sử nó tồn tại, nhưng nó thực sự chưa tồn tại trong cơ sở dữ liệu của bạn.

Trong MongoDB, bạn có thể đặt một tùy chọn để tạo tài liệu này một cách nhanh chóng và tiếp tục với hoạt động cập nhật của bạn. Đây là một hoạt động UPSERT.

Trong ví dụ này, tôi muốn thêm một bình luận vào các lớp của học sinh 10002 của tôi cho lớp 10 nhưng tài liệu này chưa tồn tại.

Như bạn có thể thấy, tôi đang sử dụng tham số thứ ba của hoạt động cập nhật để đặt tùy chọn UPSERT thành TRUE.

Tôi cũng đang sử dụng phương pháp tĩnh MongoClients.create()1 để đẩy một giá trị mới trong mảng MongoClients.create()2 chưa tồn tại, vì vậy tôi đang tạo một mảng một yếu tố trong trường hợp này.MongoClients.create()1 to push a new value in my array MongoClients.create()2 which does not exist yet, so I'm creating an array of one element in this case.

Đây là đầu ra chúng tôi nhận được:

Cập nhật nhiều tài liệu

Giống như cách tôi có thể cập nhật một tài liệu với MongoClients.create()3, tôi có thể cập nhật nhiều tài liệu với MongoClients.create()4.MongoClients.create()3, I can update multiple documents with MongoClients.create()4.

Trong ví dụ này, tôi đang sử dụng cùng một MongoClients.create()5 như trước đó, vì vậy tôi đang tạo một mảng một phần tử mới MongoClients.create()2 trong 10 tài liệu này.MongoClients.create()5 as earlier, so I'm creating a new one element array MongoClients.create()2 in these 10 documents.

Phương pháp FindOneandupdate

Cuối cùng, chúng tôi có một phương pháp rất hữu ích cuối cùng có sẵn trong trình điều khiển Java MongoDB: MongoClients.create()7.MongoClients.create()7.

Trong hầu hết các ứng dụng web, khi người dùng cập nhật một cái gì đó, họ muốn thấy bản cập nhật này được phản ánh trên trang web của họ. Nếu không có phương thức MongoClients.create()7, bạn sẽ phải chạy một thao tác cập nhật và sau đó tìm nạp tài liệu bằng một thao tác tìm để đảm bảo bạn đang in phiên bản mới nhất của đối tượng này trong trang web.MongoClients.create()7 method, you would have to run an update operation and then fetch the document with a find operation to make sure you are printing the latest version of this object in the web page.

Phương pháp MongoClients.create()7 cho phép bạn kết hợp hai hoạt động này trong một.MongoClients.create()7 method allows you to combine these two operations in one.

Như bạn có thể thấy trong ví dụ này, bạn có thể chọn phiên bản nào của tài liệu bạn muốn trả về bằng tùy chọn thích hợp.

Tôi cũng đã sử dụng ví dụ này để cho bạn thấy một loạt các nhà khai thác cập nhật:

  • src/main/java/com/mongodb0 sẽ tăng giá trị. will increment a value.

  • src/main/java/com/mongodb1 sẽ đổi tên một trường. will rename a field.

  • src/main/java/com/mongodb2 sẽ nhân giá trị với số đã cho. will multiply the value by the given number.

  • src/main/java/com/mongodb3 tương tự như đẩy nhưng sẽ chỉ đẩy giá trị trong mảng nếu giá trị chưa tồn tại. is similar to push but will only push the value in the array if the value doesn't exist already.

Có một vài nhà khai thác cập nhật khác. Bạn có thể tham khảo toàn bộ danh sách trong tài liệu của chúng tôi.documentation.

Mã cuối cùng để cập nhật

Xóa tài liệu

Xóa một tài liệu

Hãy xóa tài liệu ở trên. Để đạt được điều này, chúng tôi sẽ sử dụng phương pháp src/main/java/com/mongodb4.src/main/java/com/mongodb4.

Vui lòng tạo lớp src/main/java/com/mongodb5 trong gói guice.java1 với mã này:src/main/java/com/mongodb5 in the guice.java1 package with this code:

Như bạn có thể thấy trong ví dụ này, phương thức src/main/java/com/mongodb4 chỉ lấy một tham số: một bộ lọc, giống như thao tác src/main/java/com/mongodb8.src/main/java/com/mongodb4 only takes one parameter: a filter, just like the src/main/java/com/mongodb8 operation.

Để chạy chương trình này, hãy đảm bảo bạn thiết lập logback.xml0 trong các thuộc tính hệ thống của mình bằng IDE của bạn nếu bạn muốn chạy mã này trong IDE yêu thích của bạn (xem ở trên để biết thêm chi tiết).logback.xml0 in your system properties using your IDE if you want to run this code in your favorite IDE (see above for more details).

Ngoài ra, bạn có thể sử dụng dòng lệnh Maven này trong dự án gốc của mình (nơi thư mục src):src folder is):

Đầu ra tiêu chuẩn sẽ trông như thế này:

FindOneAndDelete()

Bạn có gắn kết cảm xúc với tài liệu của bạn và muốn có cơ hội nhìn thấy nó lần cuối trước khi quá muộn? Chúng tôi có những gì bạn cần.

Phương pháp Connection.java1 cho phép bạn truy xuất tài liệu và xóa nó trong một hoạt động nguyên tử duy nhất.Connection.java1 allows you to retrieve a document and delete it in a single atomic operation.

Đây là đầu ra chúng tôi nhận được:

Xóa nhiều tài liệu

Lần này chúng tôi sẽ sử dụng Connection.java2 thay vì Connection.java3 và chúng tôi sẽ sử dụng một bộ lọc khác để phù hợp với nhiều tài liệu hơn.Connection.java2 instead of Connection.java3 and we will use a different filter to match more documents.

Đây là đầu ra chúng tôi nhận được:

Xóa một bộ sưu tập

Việc xóa tất cả các tài liệu khỏi một bộ sưu tập sẽ không xóa bản thân bộ sưu tập vì một bộ sưu tập cũng chứa siêu dữ liệu như định nghĩa chỉ mục hoặc phân phối chunk nếu bộ sưu tập của bạn bị chia cắt chẳng hạn.

Nếu bạn muốn loại bỏ toàn bộ bộ sưu tập và tất cả các siêu dữ liệu được liên kết với nó, thì bạn cần sử dụng phương pháp Connection.java4.and all the metadata associated with it, then you need to use the Connection.java4 method.

Mã cuối cùng để xóa các hoạt động

Gói lên

Với bài đăng trên blog này, chúng tôi đã đề cập đến tất cả các hoạt động cơ bản, chẳng hạn như tạo và đọc và cũng đã thấy cách chúng tôi có thể dễ dàng sử dụng các chức năng mạnh mẽ có sẵn trong trình điều khiển Java cho MongoDB. Bạn có thể tìm thấy các liên kết đến các bài đăng trên blog khác của loạt bài này ngay bên dưới.

Nếu bạn muốn tìm hiểu thêm và sâu sắc về kiến ​​thức của mình nhanh hơn, tôi khuyên bạn nên xem M220J: MongoDB cho đào tạo nhà phát triển Java có sẵn miễn phí tại Đại học MongoDB.MongoDB University.