java連接mongoDB 並進行增刪改查操作

java連接mongoDB 並進行增刪改查操作

1、安裝 MongoDB JDBC驅動程序

在java中使用mongoDB之前,首先需要擁有java連接mongoDB的第三方驅動包(jar包)

1)maven項目可通過在pom.xml中添加依賴


 
  1. <dependencies>

  2. <dependency>

  3. <groupId>org.mongodb</groupId>

  4. <artifactId>mongo-java-driver</artifactId>

  5. <version>3.0.4</version>

  6. </dependency>

  7. </dependencies>

2)非maven項目jar包下載地址:

       mongoDB jar包

2、連接數據庫

將mongoDB JDBC驅動加入到項目之後,就可以對mongoDB進行操作了。

1)不通過認證連接mongoDB服務


 
  1. //連接到 mongodb 服務

  2. MongoClient mongoClient = new MongoClient("localhost", 27017);

這裏的 "localhost" 表示連接的服務器地址,27017 爲端口號。可以省略 端口號 不寫,系統將默認端口號爲 27017。如:


 
  1. //連接到 mongodb 服務,默認端口號爲27017

  2. MongoClient mongoClient = new MongoClient("localhost");

也可以將 服務器地址 和 端口號 都省略,系統默認服務器地址爲 "localhost",端口號爲 27017。如:


 
  1. //連接到 mongodb 服務,默認連接到localhost服務器,端口號爲27017

  2. MongoClient mongoClient = new MongoClient();

2)通過認證連接mongoDB服務


 
  1. List<ServerAddress> adds = new ArrayList<>();

  2. //ServerAddress()兩個參數分別爲 服務器地址 和 端口

  3. ServerAddress serverAddress = new ServerAddress("localhost", 27017);

  4. adds.add(serverAddress);

  5.  
  6. List<MongoCredential> credentials = new ArrayList<>();

  7. //MongoCredential.createScramSha1Credential()三個參數分別爲 用戶名 數據庫名稱 密碼

  8. MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());

  9. credentials.add(mongoCredential);

  10.  
  11. //通過連接認證獲取MongoDB連接

  12. MongoClient mongoClient = new MongoClient(adds, credentials);

ServerAddress()兩個參數 "localhost" , 27017 分別爲 服務器地址 和 端口。

MongoCredential.createScramSha1Credential()三個參數 "username", "databaseName", "password".toCharArray() 分別爲 用戶名 數據庫名稱 密碼。

3)連接到數據庫


 
  1. //連接到數據庫

  2. MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

這裏的 "test" 表示數據庫名,若指定的數據庫不存在,mongoDB將會在你第一次插入文檔時創建數據庫。

4)封裝成工具類

由於所有連接數據庫操作都需要執行這兩步操作,我們可以將這兩步操作封裝成工具類。


 
  1. import com.mongodb.MongoClient;

  2. import com.mongodb.client.MongoDatabase;

  3.  
  4. //mongodb 連接數據庫工具類

  5. public class MongoDBUtil {

  6. //不通過認證獲取連接數據庫對象

  7. public static MongoDatabase getConnect(){

  8. //連接到 mongodb 服務

  9. MongoClient mongoClient = new MongoClient("localhost", 27017);

  10.  
  11. //連接到數據庫

  12. MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

  13.  
  14. //返回連接數據庫對象

  15. return mongoDatabase;

  16. }

  17.  
  18. //需要密碼認證方式連接

  19. public static MongoDatabase getConnect2(){

  20. List<ServerAddress> adds = new ArrayList<>();

  21. //ServerAddress()兩個參數分別爲 服務器地址 和 端口

  22. ServerAddress serverAddress = new ServerAddress("localhost", 27017);

  23. adds.add(serverAddress);

  24.  
  25. List<MongoCredential> credentials = new ArrayList<>();

  26. //MongoCredential.createScramSha1Credential()三個參數分別爲 用戶名 數據庫名稱 密碼

  27. MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());

  28. credentials.add(mongoCredential);

  29.  
  30. //通過連接認證獲取MongoDB連接

  31. MongoClient mongoClient = new MongoClient(adds, credentials);

  32.  
  33. //連接到數據庫

  34. MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

  35.  
  36. //返回連接數據庫對象

  37. return mongoDatabase;

  38. }

  39. }

3、對數據庫進行CRUD

mongoDB中的數據都是通過文檔(對應於關係型數據庫表中的一行)保存的,而文檔又保存在集合(對應於關係型數據庫的表)中。

1)獲取集合

要對數據進行CRUD操作首先要獲取到操作的集合。


 
  1. //獲取集合

  2. MongoCollection<Document> collection = MongoDBUtil.getConnect().getCollection("user");

這裏的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB將會在你第一次插入文檔時創建集合。

2)創建文檔

要插入文檔首先需要創建文檔對象


 
  1. //創建文檔

  2. Document document = new Document("name","張三")

  3. .append("sex", "男")

  4. .append("age", 18);

3)插入文檔

插入一個文檔,使用 MongoCollection 對象的 insertOne() 方法,該方法接收一個 Document 對象作爲要插入的數據


 
  1. //插入一個文檔

  2. @Test

  3. public void insertOneTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //要插入的數據

  9. Document document = new Document("name","張三")

  10. .append("sex", "男")

  11. .append("age", 18);

  12. //插入一個文檔

  13. collection.insertOne(document);

  14. }

插入多個文檔,使用 MongoCollection 對象的 insertMany() 方法,該方法接收一個 數據類型爲 Document 的 List 對象作爲要插入的數據


 
  1. //插入多個文檔

  2. @Test

  3. public void insertManyTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //要插入的數據

  9. List<Document> list = new ArrayList<>();

  10. for(int i = 1; i <= 3; i++) {

  11. Document document = new Document("name", "張三")

  12. .append("sex", "男")

  13. .append("age", 18);

  14. list.add(document);

  15. }

  16. //插入多個文檔

  17. collection.insertMany(list);

  18. }

4)刪除文檔

刪除與篩選器匹配的單個文檔,使用 MongoCollection 對象的 deleteOne() 方法,該方法接收一個數據類型爲 Bson 的的對象作爲過濾器篩選出需要刪除的文檔。然後刪除第一個。爲了便於創建過濾器對象,JDBC驅動程序提供了 Filters 類。


 
  1. //刪除與篩選器匹配的單個文檔

  2. @Test

  3. public void deleteOneTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //申明刪除條件

  9. Bson filter = Filters.eq("age",18);

  10. //刪除與篩選器匹配的單個文檔

  11. collection.deleteOne(filter);

  12. }

刪除與篩選器匹配的所有文檔,使用 MongoCollection 對象的 deleteMany() 方法,該方法接收一個數據類型爲 Bson 的的對象作爲過濾器篩選出需要刪除的文檔。然後刪除所有篩選出的文檔。


 
  1. //刪除與篩選器匹配的所有文檔

  2. @Test

  3. public void deleteManyTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //申明刪除條件

  9. Bson filter = Filters.eq("age",18);

  10. //刪除與篩選器匹配的所有文檔

  11. collection.deleteMany(filter);

  12. }

5)修改文檔

修改單個文檔,使用 MongoCollection 對象的 updateOne() 方法,該方法接收兩個參數,第一個數據類型爲 Bson 的過濾器篩選出需要修改的文檔,第二個參數數據類型爲 Bson 指定如何修改篩選出的文檔。然後修改過濾器篩選出的第一個文檔。


 
  1. //修改單個文檔

  2. @Test

  3. public void updateOneTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //修改過濾器

  9. Bson filter = Filters.eq("name", "張三");

  10. //指定修改的更新文檔

  11. Document document = new Document("$set", new Document("age", 100));

  12. //修改單個文檔

  13. collection.updateOne(filter, document);

  14. }

修改多個文檔,使用 MongoCollection 對象的 updateMany() 方法,該方法接收兩個參數,第一個數據類型爲 Bson 的過濾器篩選出需要修改的文檔,第二個參數數據類型爲 Bson 指定如何修改篩選出的文檔。然後修改過濾器篩選出的所有文檔。


 
  1. //修改多個文檔

  2. @Test

  3. public void updateManyTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //修改過濾器

  9. Bson filter = Filters.eq("name", "張三");

  10. //指定修改的更新文檔

  11. Document document = new Document("$set", new Document("age", 100));

  12. //修改多個文檔

  13. collection.updateMany(filter, document);

  14. }

6)查詢文檔

使用 MongoCollection 對象的 find() 方法,該方法有多個重載方法,可以使用不帶參數的 find() 方法查詢集合中的所有文檔,也可以通過傳遞一個 Bson 類型的 過濾器查詢符合條件的文檔。這幾個重載方法均返回一個 FindIterable 類型的對象,可通過該對象遍歷出查詢到的所有文檔。

查找集合中的所有文檔


 
  1. //查找集合中的所有文檔

  2. @Test

  3. public void findTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //查找集合中的所有文檔

  9. FindIterable findIterable = collection.find();

  10. MongoCursor cursor = findIterable.iterator();

  11. while (cursor.hasNext()) {

  12. System.out.println(cursor.next());

  13. }

  14. }

指定查詢過濾器查詢


 
  1. //指定查詢過濾器查詢

  2. @Test

  3. public void FilterfindTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //指定查詢過濾器

  9. Bson filter = Filters.eq("name", "張三");

  10. //指定查詢過濾器查詢

  11. FindIterable findIterable = collection.find(filter);

  12. MongoCursor cursor = findIterable.iterator();

  13. while (cursor.hasNext()) {

  14. System.out.println(cursor.next());

  15. }

  16. }

可通過 first() 方法取出查詢到的第一個文檔


 
  1. //取出查詢到的第一個文檔

  2. @Test

  3. public void findTest(){

  4. //獲取數據庫連接對象

  5. MongoDatabase mongoDatabase = MongoDBUtil.getConnect();

  6. //獲取集合

  7. MongoCollection<Document> collection = mongoDatabase.getCollection("user");

  8. //查找集合中的所有文檔

  9. FindIterable findIterable = collection.find();

  10. //取出查詢到的第一個文檔

  11. Document document = (Document) findIterable.first();

  12. //打印輸出

  13. System.out.println(document);

  14. }

4、總結

到這裏,java對mongoDB的一些基本操作就介紹完了。實現的步驟爲:添加驅動==>連接到服務==>連接到數據庫==>選擇集合==>對集合進行CRUD操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章