1. 程式人生 > >MongoDB Java 學習筆記

MongoDB Java 學習筆記

【前言】

由於處於執行緒安全等考慮,MongoDBJava從3.0開始已經打算廢棄DB開頭的類的使用,所以整體呼叫上有了較大的區別,特以此文志之

【正文】

環境配置

Java程式中如果要使用MongoDB,你需要確保已經安裝了Java環境及MongoDB JDBC 驅動。

· 首先你必須下載mongo jar包,

    國內快速下載地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/

    網盤下載地址:http://pan.baidu.com/s/1i3Mv0dn   (這裡測試使用3.2.2)

· 你需要將mongo.jar

包含在你的 classpath

連線資料庫

連線資料庫,你需要指定資料庫名稱,如果指定的資料庫不存在,mongo會自動建立資料庫。

連線資料庫的Java程式碼如下:

import java.util.ArrayList;
import java.util.List;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully");
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

建立集合

我們可以使用com.mongodb.client.MongoDatabase類中的createCollection()來建立集合

程式碼片段如下:

import java.util.ArrayList;
import java.util.List;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully");
			
			//建立集合 引數為 “集合名稱”
			mongoDatabase.createCollection("collectionName");
			System.out.println("Collection created successfully");
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

獲取集合

我們可以使用com.mongodb.DBCollection類的 getCollection()方法來獲取一個集合

程式碼片段如下:
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully");
			
			//獲取集合 引數為“集合名稱”
			MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("collectionName");
			System.out.println("Collection mycol selected successfully");
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

插入文件

我們可以使用com.mongodb.client.MongoCollection類的insert()方法來插入一個文件

程式碼片段如下:
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully");
						
			//獲取集合 引數為“集合名稱”
			MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("collectionName");
			System.out.println("Collection mycol selected successfully");
			
			//插入文件
			/**
			 * 1. 建立文件 org.bson.Document 引數為key-value的格式
			 * 2. 建立文件集合List<Document>
			 * 3. 將文件集合插入資料庫集合中 mongoCollection.insertMany(List<Document>) 插入單個文件可以用 mongoCollection.insertOne(Document)
			 * */
			Document document = new Document("title", "MongoDB").
		            append("description", "database").
		            append("likes", 100).
		            append("by", "Fly");
			List<Document> documents = new ArrayList<Document>();
			documents.add(document);
			mongoCollection.insertMany(documents);
			System.out.println("Document inserted successfully");
			
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

檢索所有文件

我們可以使用com.mongodb.client.MongoCollection類中的find()方法來獲取集合中的所有文件。

此方法返回一個遊標,所以你需要遍歷這個遊標。

程式碼片段如下:
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully");
			
			//獲取集合 引數為“集合名稱”
			MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("collectionName");
			System.out.println("Collection mycol selected successfully");
			
			//檢索所有文件
			/**
			 * 1. 獲取迭代器FindIterable<Document>
			 * 2. 獲取遊標MongoCursor<Document>
			 * 3. 通過遊標遍歷檢索出的文件集合
			 * */
			FindIterable<Document> findIterable = mongoCollection.find();
			MongoCursor<Document> mongoCursor = findIterable.iterator();
			while(mongoCursor.hasNext()){
				System.out.println(mongoCursor.next());
			}
			
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

更新文件

你可以使用com.mongodb.client.MongoCollection類中的 updateOne()updateMany()方法來更新集合中的文件。

程式碼片段如下:

import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("userName", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully");
			
			//獲取集合 引數為“集合名稱”
			MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("collectionName");
			System.out.println("Collection mycol selected successfully");
			
			//更新文件	 將文件中likes=100的文件修改為likes=200 
			mongoCollection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));
			//檢索檢視結果
			FindIterable<Document> findIterable = mongoCollection.find();
			MongoCursor<Document> mongoCursor = findIterable.iterator();
			while(mongoCursor.hasNext()){
				System.out.println(mongoCursor.next());
			}
			
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

刪除文件

要刪除集合中符合條件的文件,需要使用com.mongodb.client.MongoCollection類中的deleteOne ()deleteMany()方法。分別表示刪除第一個符合條件的文件和刪除所有符合條件的文件。

程式碼片段如下:

import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC {
	public static void main(String[] args){
		try {
			//連線到MongoDB服務 如果是遠端連線可以替換“localhost”為伺服器所在IP地址
			//ServerAddress()兩個引數分別為 伺服器地址 和 埠
			ServerAddress serverAddress = new ServerAddress("localhost",27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);
			
			//MongoCredential.createScramSha1Credential()三個引數分別為 使用者名稱 資料庫名稱 密碼
			MongoCredential credential = MongoCredential.createScramSha1Credential("userName", "databaseName", "password".toCharArray());
			List<MongoCredential> credentials = new ArrayList<MongoCredential>();
			credentials.add(credential);
			
			//通過連線認證獲取MongoDB連線
			MongoClient mongoClient = new MongoClient(addrs,credentials);
			
			//連線到資料庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase("<span style="font-family: Arial, Helvetica, sans-serif;">databaseName</span><span style="font-family: Arial, Helvetica, sans-serif;">");</span>
			System.out.println("Connect to database successfully");
			
			//獲取集合 引數為“集合名稱”
			MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("collectionName");
			System.out.println("Collection mycol selected successfully");
			
			//刪除符合條件的第一個文件
			mongoCollection.deleteOne(Filters.eq("likes", 200));
			//刪除所有符合條件的文件
			mongoCollection.deleteMany (Filters.eq("likes", 200));
			//檢索檢視結果
			FindIterable<Document> findIterable = mongoCollection.find();
			MongoCursor<Document> mongoCursor = findIterable.iterator();
			while(mongoCursor.hasNext()){
				System.out.println(mongoCursor.next());
			}
			
		} catch (Exception e) {
			System.err.println( e.getClass().getName() + ": " + e.getMessage() );
		}
	}
}

要注意,上面的資料庫連線我都沒有手動呼叫關閉,為了防止意外發生建議加上如下程式碼:

finally{
    mongoClient.close();
}


你還可以使用aggregate(),createIndex(),count()等方法來操作MongoDB資料庫、集合。