本文實例講述了java連接mongodb并進行增刪改查操作。分享給大家供大家參考,具體如下:
1、安裝 mongodb jdbc驅動程序
在java中使用mongodb之前,首先需要擁有java連接mongodb的第三方驅動包(jar包)
1)maven項目可通過在pom.xml中添加依賴
1
2
3
4
5
6
7
|
<dependencies> <dependency> <groupid>org.mongodb</groupid> <artifactid>mongo-java-driver</artifactid> <version> 3.0 . 4 </version> </dependency> </dependencies> |
2)非maven項目jar包下載地址:
2、連接數據庫
將mongodb jdbc驅動加入到項目之后,就可以對mongodb進行操作了。
1)不通過認證連接mongodb服務
1
2
|
//連接到 mongodb 服務 mongoclient mongoclient = new mongoclient( "localhost" , 27017 ); |
這里的 "localhost" 表示連接的服務器地址,27017 為端口號。可以省略 端口號 不寫,系統將默認端口號為 27017。如:
1
2
|
//連接到 mongodb 服務,默認端口號為27017 mongoclient mongoclient = new mongoclient( "localhost" ); |
也可以將 服務器地址 和 端口號 都省略,系統默認服務器地址為 "localhost",端口號為 27017。如:
1
2
|
//連接到 mongodb 服務,默認連接到localhost服務器,端口號為27017 mongoclient mongoclient = new mongoclient(); |
2)通過認證連接mongodb服務
1
2
3
4
5
6
7
8
9
10
|
list<serveraddress> adds = new arraylist<>(); //serveraddress()兩個參數分別為 服務器地址 和 端口 serveraddress serveraddress = new serveraddress( "localhost" , 27017 ); adds.add(serveraddress); list<mongocredential> credentials = new arraylist<>(); //mongocredential.createscramsha1credential()三個參數分別為 用戶名 數據庫名稱 密碼 mongocredential mongocredential = mongocredential.createscramsha1credential( "username" , "databasename" , "password" .tochararray()); credentials.add(mongocredential); //通過連接認證獲取mongodb連接 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import com.mongodb.mongoclient; import com.mongodb.client.mongodatabase; //mongodb 連接數據庫工具類 public class mongodbutil { //不通過認證獲取連接數據庫對象 public static mongodatabase getconnect(){ //連接到 mongodb 服務 mongoclient mongoclient = new mongoclient( "localhost" , 27017 ); //連接到數據庫 mongodatabase mongodatabase = mongoclient.getdatabase( "test" ); //返回連接數據庫對象 return mongodatabase; } //需要密碼認證方式連接 public static mongodatabase getconnect2(){ list<serveraddress> adds = new arraylist<>(); //serveraddress()兩個參數分別為 服務器地址 和 端口 serveraddress serveraddress = new serveraddress( "localhost" , 27017 ); adds.add(serveraddress); list<mongocredential> credentials = new arraylist<>(); //mongocredential.createscramsha1credential()三個參數分別為 用戶名 數據庫名稱 密碼 mongocredential mongocredential = mongocredential.createscramsha1credential( "username" , "databasename" , "password" .tochararray()); credentials.add(mongocredential); //通過連接認證獲取mongodb連接 mongoclient mongoclient = new mongoclient(adds, credentials); //連接到數據庫 mongodatabase mongodatabase = mongoclient.getdatabase( "test" ); //返回連接數據庫對象 return mongodatabase; } } |
3、對數據庫進行crud
mongodb中的數據都是通過文檔(對應于關系型數據庫表中的一行)保存的,而文檔又保存在集合(對應于關系型數據庫的表)中。
1)獲取集合
要對數據進行crud操作首先要獲取到操作的集合。
1
2
|
//獲取集合 mongocollection<document> collection = mongodbutil.getconnect().getcollection( "user" ); |
這里的 "user" 表示集合的名字,如果指定的集合不存在,mongodb將會在你第一次插入文檔時創建集合。
2)創建文檔
要插入文檔首先需要創建文檔對象
1
2
3
4
|
//創建文檔 document document = new document( "name" , "張三" ) .append( "sex" , "男" ) .append( "age" , 18 ); |
3)插入文檔
插入一個文檔,使用 mongocollection 對象的 insertone()
方法,該方法接收一個 document 對象作為要插入的數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//插入一個文檔 @test public void insertonetest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //要插入的數據 document document = new document( "name" , "張三" ) .append( "sex" , "男" ) .append( "age" , 18 ); //插入一個文檔 collection.insertone(document); } |
插入多個文檔,使用 mongocollection 對象的 insertmany()
方法,該方法接收一個 數據類型為 document 的 list 對象作為要插入的數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//插入多個文檔 @test public void insertmanytest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //要插入的數據 list<document> list = new arraylist<>(); for ( int i = 1 ; i <= 3 ; i++) { document document = new document( "name" , "張三" ) .append( "sex" , "男" ) .append( "age" , 18 ); list.add(document); } //插入多個文檔 collection.insertmany(list); } |
4)刪除文檔
刪除與篩選器匹配的單個文檔,使用 mongocollection 對象的 deleteone()
方法,該方法接收一個數據類型為 bson 的的對象作為過濾器篩選出需要刪除的文檔。然后刪除第一個。為了便于創建過濾器對象,jdbc驅動程序提供了 filters 類。
1
2
3
4
5
6
7
8
9
10
11
12
|
//刪除與篩選器匹配的單個文檔 @test public void deleteonetest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //申明刪除條件 bson filter = filters.eq( "age" , 18 ); //刪除與篩選器匹配的單個文檔 collection.deleteone(filter); } |
刪除與篩選器匹配的所有文檔,使用 mongocollection 對象的 deletemany()
方法,該方法接收一個數據類型為 bson 的的對象作為過濾器篩選出需要刪除的文檔。然后刪除所有篩選出的文檔。
1
2
3
4
5
6
7
8
9
10
11
12
|
//刪除與篩選器匹配的所有文檔 @test public void deletemanytest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //申明刪除條件 bson filter = filters.eq( "age" , 18 ); //刪除與篩選器匹配的所有文檔 collection.deletemany(filter); } |
5)修改文檔
修改單個文檔,使用 mongocollection 對象的 updateone()
方法,該方法接收兩個參數,第一個數據類型為 bson 的過濾器篩選出需要修改的文檔,第二個參數數據類型為 bson 指定如何修改篩選出的文檔。然后修改過濾器篩選出的第一個文檔。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//修改單個文檔 @test public void updateonetest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //修改過濾器 bson filter = filters.eq( "name" , "張三" ); //指定修改的更新文檔 document document = new document( "$set" , new document( "age" , 100 )); //修改單個文檔 collection.updateone(filter, document); } |
修改多個文檔,使用 mongocollection 對象的 updatemany()
方法,該方法接收兩個參數,第一個數據類型為 bson 的過濾器篩選出需要修改的文檔,第二個參數數據類型為 bson 指定如何修改篩選出的文檔。然后修改過濾器篩選出的所有文檔。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//修改多個文檔 @test public void updatemanytest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //修改過濾器 bson filter = filters.eq( "name" , "張三" ); //指定修改的更新文檔 document document = new document( "$set" , new document( "age" , 100 )); //修改多個文檔 collection.updatemany(filter, document); } |
6)查詢文檔
使用 mongocollection 對象的 find()
方法,該方法有多個重載方法,可以使用不帶參數的 find()
方法查詢集合中的所有文檔,也可以通過傳遞一個 bson 類型的 過濾器查詢符合條件的文檔。這幾個重載方法均返回一個 finditerable 類型的對象,可通過該對象遍歷出查詢到的所有文檔。
查找集合中的所有文檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//查找集合中的所有文檔 @test public void findtest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //查找集合中的所有文檔 finditerable finditerable = collection.find(); mongocursor cursor = finditerable.iterator(); while (cursor.hasnext()) { system.out.println(cursor.next()); } } |
指定查詢過濾器查詢
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//指定查詢過濾器查詢 @test public void filterfindtest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //指定查詢過濾器 bson filter = filters.eq( "name" , "張三" ); //指定查詢過濾器查詢 finditerable finditerable = collection.find(filter); mongocursor cursor = finditerable.iterator(); while (cursor.hasnext()) { system.out.println(cursor.next()); } } |
可通過 first()
方法取出查詢到的第一個文檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//取出查詢到的第一個文檔 @test public void findtest(){ //獲取數據庫連接對象 mongodatabase mongodatabase = mongodbutil.getconnect(); //獲取集合 mongocollection<document> collection = mongodatabase.getcollection( "user" ); //查找集合中的所有文檔 finditerable finditerable = collection.find(); //取出查詢到的第一個文檔 document document = (document) finditerable.first(); //打印輸出 system.out.println(document); } |
4、總結
到這里,java對mongodb的一些基本操作就介紹完了。實現的步驟為:添加驅動==>連接到服務==>連接到數據庫==>選擇集合==>對集合進行crud操作。
希望本文所述對大家java程序設計有所幫助。