java連接mongoDB 並進行增刪改查操作
1、安裝 MongoDB JDBC驅動程序
在java中使用mongoDB之前,首先需要擁有java連接mongoDB的第三方驅動包(jar包)
1)maven項目可通過在pom.xml中添加依賴
-
<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服務
-
//連接到 mongodb 服務
-
MongoClient mongoClient = new MongoClient("localhost", 27017);
這裏的 "localhost" 表示連接的服務器地址,27017 爲端口號。可以省略 端口號 不寫,系統將默認端口號爲 27017。如:
-
//連接到 mongodb 服務,默認端口號爲27017
-
MongoClient mongoClient = new MongoClient("localhost");
也可以將 服務器地址 和 端口號 都省略,系統默認服務器地址爲 "localhost",端口號爲 27017。如:
-
//連接到 mongodb 服務,默認連接到localhost服務器,端口號爲27017
-
MongoClient mongoClient = new MongoClient();
2)通過認證連接mongoDB服務
-
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)連接到數據庫
-
//連接到數據庫
-
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
這裏的 "test" 表示數據庫名,若指定的數據庫不存在,mongoDB將會在你第一次插入文檔時創建數據庫。
4)封裝成工具類
由於所有連接數據庫操作都需要執行這兩步操作,我們可以將這兩步操作封裝成工具類。
-
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操作首先要獲取到操作的集合。
-
//獲取集合
-
MongoCollection<Document> collection = MongoDBUtil.getConnect().getCollection("user");
這裏的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB將會在你第一次插入文檔時創建集合。
2)創建文檔
要插入文檔首先需要創建文檔對象
-
//創建文檔
-
Document document = new Document("name","張三")
-
.append("sex", "男")
-
.append("age", 18);
3)插入文檔
插入一個文檔,使用 MongoCollection 對象的 insertOne() 方法,該方法接收一個 Document 對象作爲要插入的數據
-
//插入一個文檔
-
@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 對象作爲要插入的數據
-
//插入多個文檔
-
@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 類。
-
//刪除與篩選器匹配的單個文檔
-
@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 的的對象作爲過濾器篩選出需要刪除的文檔。然後刪除所有篩選出的文檔。
-
//刪除與篩選器匹配的所有文檔
-
@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 指定如何修改篩選出的文檔。然後修改過濾器篩選出的第一個文檔。
-
//修改單個文檔
-
@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 指定如何修改篩選出的文檔。然後修改過濾器篩選出的所有文檔。
-
//修改多個文檔
-
@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 類型的對象,可通過該對象遍歷出查詢到的所有文檔。
查找集合中的所有文檔
-
//查找集合中的所有文檔
-
@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());
-
}
-
}
指定查詢過濾器查詢
-
//指定查詢過濾器查詢
-
@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() 方法取出查詢到的第一個文檔
-
//取出查詢到的第一個文檔
-
@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操作。