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);
}
}