JAVA 操作 MongoDB

                                          JAVA  操作 MongoDB


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import org.bson.Document;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import com.mongodb.client.model.Filters;

public class App {

	private static App singleton;

	private App() {
	}

	public static synchronized App getInstance() {
		if (singleton == null) {
			singleton = new App();
		}
		return singleton;
	}

	private static final String host = "127.0.0.1";
	private static final Integer port = 27017;

	public static MongoClient getMongoClient() {
		MongoClient mongoClient = new MongoClient(host, port);
		return mongoClient;
	}

	/**
	 * findAllDataByDatabaseNameAndTable 獲取數據
	 * 
	 * @param databaseName 數據庫名稱
	 * @param table        表名 (連接名)
	 */
	public void findAllDataByDatabaseNameAndTable(String databaseName, String table) {
		try {
			MongoClient mongoClient = getMongoClient();
			// 連接到數據庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
			System.out.println("連接數據庫" + databaseName + "成功");
			MongoCollection<Document> collection = mongoDatabase.getCollection(table);
			System.out.println("集合 " + table + " 選擇成功");
			FindIterable<Document> findIterable = collection.find();
			MongoCursor<Document> mongoCursor = findIterable.iterator();
			while (mongoCursor.hasNext()) {
				System.out.println(mongoCursor.next().toJson());
			}
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	/**
	 * createCollection 創建對應的數據庫的表(連接)
	 * 
	 * @param databaseName 數據庫名稱
	 * @param table        表名(連接名)
	 */
	public void createCollection(String databaseName, String table) {
		try {
			// 連接到 mongodb 服務
			MongoClient mongoClient = getMongoClient();
			// 連接到數據庫
			MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
			System.out.println("連接數據庫" + databaseName + "成功");
			mongoDatabase.createCollection(table);
			System.out.println("集合創建成功");
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	/**
	 * getAllCollectionsBydatabaseName 獲取所有的集合 根據 數據庫名稱
	 * 
	 * @param databaseName 數據庫名稱
	 */
	public void getAllCollectionsByDatabaseName(String databaseName) {
		MongoClient mongoClient = getMongoClient();
		MongoIterable<String> colls = mongoClient.getDatabase(databaseName).listCollectionNames();
		for (String coll : colls) {
			System.out.println(coll);
		}
	}

	/**
	 * getDatabaseAll 獲取所有的數據庫
	 */
	public void getDatabaseAll() {
		try {
			MongoClient mongoClient = getMongoClient();
			MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
			for (String databaseName : databaseNames) {
				System.out.println(databaseName);
			}
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	/**
	 * updateDocument 更新文檔數據
	 * 
	 * @param databaseName 數據庫名
	 * @param table        集合名稱
	 * @param historyMap   歷史值
	 * @param nowValue     新的值
	 */
	public void updateDocument(String databaseName, String table, HashMap<String, String> historyMap, String nowValue) {
		try {
			MongoClient mongoClient = getMongoClient();
			MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 連接到數據庫
			System.out.println("連接數據庫" + databaseName + "成功");
			MongoCollection<Document> collection = mongoDatabase.getCollection(table);
			System.out.println("集合 " + table + " 選擇成功");

			for (Map.Entry<String, String> entry : historyMap.entrySet()) {
				collection.updateMany(Filters.eq(entry.getKey(), entry.getValue()),
						new Document("$set", new Document(entry.getKey(), nowValue)));
			}
			FindIterable<Document> findIterable = collection.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());
		}
	}

	/**
	 * deleteDocument 刪除文檔
	 * 
	 * @param databaseName 數據庫名
	 * @param table        集合名稱
	 * @param historyMap   歷史值
	 */
	public void deleteDocument(String databaseName, String table, HashMap<String, String> historyMap) {
		try {
			MongoClient mongoClient = getMongoClient();
			MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 連接到數據庫
			System.out.println("連接數據庫" + databaseName + "成功");
			MongoCollection<Document> collection = mongoDatabase.getCollection(table);
			System.out.println("集合 " + table + " 選擇成功");

			for (Map.Entry<String, String> map : historyMap.entrySet()) {
				collection.deleteMany(Filters.eq(map.getKey(), map.getValue())); // 刪除所有符合條件的文檔
			}
			// collection.deleteOne(Filters.eq("likes", 200)); // 刪除符合條件的第一個文檔
			// 檢索查看結果
			FindIterable<Document> findIterable = collection.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());
		}
	}

	/**
	 * insertDocument 新增文檔
	 * 
	 * @param databaseName 數據庫名
	 * @param table        集合名稱
	 * @param nowMap       新增的值
	 */
	public void insertDocument(String databaseName, String table, HashMap<String, String> nowMap) {
		try {
			MongoClient mongoClient = getMongoClient(); // 連接到 mongodb 服務
			MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 連接到數據庫
			System.out.println("連接數據庫" + databaseName + "成功");
			MongoCollection<Document> collection = mongoDatabase.getCollection(table); // 獲取集合
			System.out.println("集合 " + table + " 選擇成功");
			Document document = new Document();
			for (Map.Entry<String, String> map : nowMap.entrySet()) {
				document.append(map.getKey(), map.getValue());
			}
			List<Document> documents = new ArrayList<Document>();
			documents.add(document);
			collection.insertMany(documents); // 添加文檔(對應的BSON數據)
			System.out.println("數據庫" + databaseName + ",集合爲" + table + ",文檔插入成功");
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	/**
	 * findDataByTypeLike 模糊查詢
	 * 
	 * @param databaseName 數據庫名稱
	 * @param table        集合名稱
	 * @param nowMap       參數
	 */
	public void findDataByTypeLike(String databaseName, String table, HashMap<String, String> nowMap) {
		MongoClient mongoClient = getMongoClient(); // 連接到 mongodb 服務
		MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 連接到數據庫
		MongoCollection<Document> collection = mongoDatabase.getCollection(table); // 獲取集合
		BasicDBObject queryObject = new BasicDBObject();
		for (Map.Entry<String, String> map : nowMap.entrySet()) {
			Pattern queryPattern = Pattern.compile(map.getValue(), Pattern.CASE_INSENSITIVE);
			queryObject.put(map.getKey(), queryPattern);
		}
		FindIterable<Document> document = collection.find(queryObject);
		for (Document doc : document) {
			System.out.println(doc);
		}

	}

	/**
	 * findDataLimitAndLikeByPage 模糊並且分頁查詢
	 * 
	 * @param databaseName 數據庫名稱
	 * @param table        集合名稱
	 * @param nowMap       參數
	 * @param pageNo       頁碼
	 * @param pageSize     條數
	 */
	public void findDataLimitAndLikeByPage(String databaseName, String table, HashMap<String, String> nowMap,
			Integer pageNo, Integer pageSize) {
		MongoClient mongoClient = getMongoClient(); // 連接到 mongodb 服務
		MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 連接到數據庫
		MongoCollection<Document> collection = mongoDatabase.getCollection(table); // 獲取集合
		BasicDBObject queryObject = new BasicDBObject();
		for (Map.Entry<String, String> map : nowMap.entrySet()) {
			Pattern queryPattern = Pattern.compile(map.getValue(), Pattern.CASE_INSENSITIVE);
			queryObject.put(map.getKey(), queryPattern);
		}
		FindIterable<Document> document = collection.find(queryObject).skip(pageNo).limit(pageSize);
		for (Document doc : document) {
			System.out.println(doc);
		}

	}

	public static void main(String[] args) {
		App app = App.getInstance();
		HashMap<String, String> map = new HashMap<String, String>();
		// map.put("name", "謝");
		// map.put("phone", "15937469513");
		// map.put("username", "admin");
		// map.put("password", "123456");
		// map.put("age", "21");
		// map.put("address", "湖北省 恩施土家族苗族自治州 利川市");
		// app.updateDocument("student", "user", map, "小企鵝");
		// app.deleteDocument("student", "user", map);
		// app.insertDocument("student", "user", map);
		// app.findAllDataByDatabaseNameAndTable("student", "user");
		// app.findDataByTypeLike("student", "user", map);

		int pageNo = 2; // 頁碼
		int pageSize = 5; // 條數
		System.out.println("當前是第" + pageNo + "頁,查詢條數爲" + pageSize);
		pageNo = (pageNo - 1) * pageSize;
		app.findDataLimitAndLikeByPage("student", "user", map, pageNo, pageSize);

	}

}

 

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