一,代碼實現
1 import com.mongodb.DBCollection; 2 import com.mongodb.MongoClient; 3 import java.net.UnknownHostException; 4 5 6 public class MongDBUtile { 7 /** 8 * MongoClient是線程安全的 9 * Mongo是非線程安全的 10 * 目前mongodb API中已經建議用MongoClient替代Mongo 11 */ 12 private MongoClient mongoClient = null; 13 14 15 /** 16 * 指定數據庫的指定集合 17 * @param dbName 18 * @param collectionName 19 * @return 20 */ 21 public DBCollection getDBCollection(String dbName, String collectionName) { 22 return mongoClient.getDB(dbName).getCollection(collectionName); 23 } 24 25 /** 26 * 單例模式獲取MongoClient 27 */ 28 private static MongDBUtile getInstance = null; 29 30 public static MongDBUtile getInstance(String host, int port){ 31 getInstance = new MongDBUtile(host,port); 32 return getInstance; 33 } 34 35 private MongDBUtile(String host, int port){ 36 if(mongoClient == null){ 37 synchronized (MongDBUtile.class) { 38 if (mongoClient == null) { 39 initConn(host, port); 40 } 41 } 42 } 43 } 44 45 /** 46 * 初始化MongoClient 47 * @param host 48 * @param port 49 */ 50 private void initConn(String host, int port) { 51 try { 52 mongoClient = new MongoClient(host,port); 53 } catch (UnknownHostException e) { 54 e.printStackTrace(); 55 } 56 } 57 58 }
1.1 插入
1 /** 2 * 新增 一條記錄 3 * @param dbCollection 4 */ 5 public static void addOne(DBCollection dbCollection){ 6 DBObject documents = new BasicDBObject("name","張三").append("age", 45).append("sex", "男").append("address", 7 new BasicDBObject("postCode", 100000).append("street", "深南大道888號").append("city", "深圳")); 8 dbCollection.insert(documents); 9 } 10 11 /** 12 * 批量新增記錄:可以使用各種數據類型 13 * @param dbCollection 14 */ 15 public static void addList(DBCollection dbCollection){ 16 List<DBObject> listdbo= new ArrayList<>(); 17 DBObject dbObject = new BasicDBObject(); 18 dbObject.put("name", "老王"); 19 // 可以直接保存List類型 20 List<String> list = new ArrayList<>(); 21 list.add("老王1"); 22 list.add("老王2"); 23 dbObject.put("remark", list); 24 listdbo.add(dbObject); 25 26 dbObject = new BasicDBObject(); 27 // 可以直接保存map 28 Map<String,List<String>> map = new HashMap<>(); 29 List<String> hobbys = new ArrayList<>(); 30 hobbys.add("吃飯"); 31 hobbys.add("睡覺"); 32 hobbys.add("吃雞"); 33 map.put("愛好", hobbys); 34 dbObject.put("hobby", map); 35 listdbo.add(dbObject); 36 37 dbObject = new BasicDBObject(); 38 dbObject.put("name", "老張"); 39 dbObject.put("age", 52); 40 dbObject.put("job", "快遞員"); 41 dbObject.put("remark", new BasicDBObject("address", "廣東省深圳市").append("street", "深南大道888號")); 42 listdbo.add(dbObject); 43 44 dbCollection.insert(listdbo); 45 } 46 47 /** 48 * json轉對象后執行新增 49 * @param dbCollection 50 */ 51 public static void addByJson(DBCollection dbCollection){ 52 String json = "{ \"name\" : \"王五\" , \"age\" : 66 , \"job\" : \"快遞員\" , \"remark\" : { \"address\" : \"廣東省深圳市\" , \"street\" : \"深南大道888號\"}}"; 53 DBObject dbObject = (DBObject)JSON.parse(json); 54 dbCollection.insert(dbObject); 55 }
方法調用以及運行結果
1 //連接mongoDB,並打開數據庫 2 DBCollection dbCollection = MongDBUtile.getInstance(HOST,PORT).getDBCollection(DB_NAME, DBCOLLECTION_NAME); 3 4 addOne(dbCollection); 5 addList(dbCollection); 6 addByJson(dbCollection);
1.2 查詢
1 /** 2 * 條件查詢:name 為 張三 3 * @param dbCollection 4 */ 5 public static void queryOne(DBCollection dbCollection){ 6 DBObject result = dbCollection.findOne(new BasicDBObject("name","張三")); 7 System.out.println(result); 8 } 9 10 /** 11 * 分頁查詢:跳過前2條后的3條數據 12 * @param dbCollection 13 */ 14 public static void queryPage(DBCollection dbCollection){ 15 DBCursor cursor = dbCollection.find().skip(2).limit(3); 16 //遍歷輸出結果 17 while (cursor.hasNext()) { 18 System.out.println(cursor.next()); 19 } 20 } 21 /** 22 * 范圍查詢:第3條 到 第5條 之間的記錄 23 * @param dbCollection 24 * 大於 - $gt 25 * 小於 - $lt 26 * 大於等於 - $gte 27 * 小於等於 - $lte 28 */ 29 public static void queryRange(DBCollection dbCollection) { 30 DBObject range = new BasicDBObject(); 31 range.put("$gte", 28); 32 range.put("$lte", 32); 33 34 DBObject dbObject = new BasicDBObject(); 35 dbObject.put("age", range); 36 DBCursor cursor = dbCollection.find(dbObject); 37 while (cursor.hasNext()) { 38 System.out.println(cursor.next()); 39 } 40 } 41 42 /**' 43 *查詢出全部的 記錄 44 * @param dbCollection 45 */ 46 public static void queryList(DBCollection dbCollection) { 47 DBCursor cursor = dbCollection.find(); 48 while(cursor.hasNext()){ 49 System.out.println(cursor.next()); 50 } 51 }
方法調用以及運行結果
1 //連接mongoDB,並打開數據庫 2 DBCollection dbCollection = MongDBUtile.getInstance(HOST,PORT).getDBCollection(DB_NAME, DBCOLLECTION_NAME); 3 System.out.println("條件查詢:name 為 張三"); 4 queryOne(dbCollection); 5 System.out.println("跳過前2條后的3條數據"); 6 queryPage(dbCollection); 7 System.out.println("age在50到52之間的記錄"); 8 queryRange(dbCollection); 9 System.out.println("查詢出全部的記錄"); 10 queryList(dbCollection); 11 12 13 *******************************運行結果******************************* 14 15 條件查詢:name 為 張三 16 { "_id" : { "$oid" : "5a50b3d6e6fbe9e658745f04"} , "name" : "張三" , "age" : 45 , "sex" : "男" , "address" : { "postCode" : 100000 , "street" : "深南大道888號" , "city" : "深圳"}} 17 跳過前2條后的3條數據 18 { "_id" : { "$oid" : "5a50b41ae6fb51a28bf2b2d5"} , "hobby" : { "愛好" : [ "吃飯" , "睡覺" , "吃雞"]}} 19 { "_id" : { "$oid" : "5a50b41ae6fb51a28bf2b2d6"} , "name" : "老張" , "age" : 52 , "job" : "快遞員" , "remark" : { "address" : "廣東省深圳市" , "street" : "深南大道888號"}} 20 age在50到52之間的記錄 21 { "_id" : { "$oid" : "5a50b41ae6fb51a28bf2b2d6"} , "name" : "老張" , "age" : 52 , "job" : "快遞員" , "remark" : { "address" : "廣東省深圳市" , "street" : "深南大道888號"}} 22 查詢出全部的記錄 23 { "_id" : { "$oid" : "5a50b3d6e6fbe9e658745f04"} , "name" : "張三" , "age" : 45 , "sex" : "男" , "address" : { "postCode" : 100000 , "street" : "深南大道888號" , "city" : "深圳"}} 24 { "_id" : { "$oid" : "5a50b41ae6fb51a28bf2b2d4"} , "name" : "老王" , "remark" : [ "老王1" , "老王2"]} 25 { "_id" : { "$oid" : "5a50b41ae6fb51a28bf2b2d5"} , "hobby" : { "愛好" : [ "吃飯" , "睡覺" , "吃雞"]}} 26 { "_id" : { "$oid" : "5a50b41ae6fb51a28bf2b2d6"} , "name" : "老張" , "age" : 52 , "job" : "快遞員" , "remark" : { "address" : "廣東省深圳市" , "street" : "深南大道888號"}}
1.3 更新
/** * 修改指定記錄 * @param dbCollection */ public static void updateOne(DBCollection dbCollection) { // 先根據id查詢將這條記錄查詢出來 DBObject qryResult = dbCollection.findOne(new ObjectId("5a50b768e6fbda046406b255")); // 修改指定的值 qryResult.put("age", 55); DBObject oldDBObject = new BasicDBObject(); oldDBObject.put("_id", new ObjectId("5a50b768e6fbda046406b255")); dbCollection.update(oldDBObject, qryResult); } /** * 修改多條記錄 * @param dbCollection */ public static void updateMulti(DBCollection dbCollection) { DBObject newDBObject = new BasicDBObject(); newDBObject.put("name", "張三"); newDBObject.put("address", "廣東深圳"); newDBObject.put("remark", "張三是一個man"); DBObject oldDBObject = new BasicDBObject(); oldDBObject.put("name", "張三"); // 需要加上這個 DBObject upsertValue = new BasicDBObject("$set", newDBObject); // 后面的兩個參數:1.若所更新的數據沒有,則插入 ; 2、同時更新多個符合條件的文檔(collection) dbCollection.update(oldDBObject, upsertValue, true, true); }
方法調用以及運行結果
1.4 刪除
1 /** 2 *刪除第一個 3 * @param dbCollection 4 */ 5 public static void deleteFirst(DBCollection dbCollection){ 6 DBObject dbObject = dbCollection.findOne(); 7 dbCollection.remove(dbObject); 8 } 9 10 /** 11 * 刪除指定的一條記錄 12 * @param dbCollection 13 */ 14 public static void deleteOne(DBCollection dbCollection){ 15 DBObject dbObject = new BasicDBObject(); 16 dbObject.put("_id", new ObjectId("5a50b41ae6fb51a28bf2b2d4")); 17 dbCollection.remove(dbObject); 18 } 19 20 /** 21 * 刪除多條記錄 22 * 例如:select * from tb where name in('12','34') 23 * @param dbCollection25 */ 26 public static void deleteByIn(DBCollection dbCollection) { 27 List<String> list = new ArrayList<String>(); 28 list.add("老張"); 29 list.add("老王"); 30 list.add("張三"); 31 DBObject dbObject = new BasicDBObject("$in", list); 32 33 DBObject delObject = new BasicDBObject(); 34 delObject.put("name", dbObject); 35 dbCollection.remove(delObject); 36 } 37 38 /** 39 * 刪除全部的記錄 40 * @param dbCollection 41 */ 42 public static void deleteAll(DBCollection dbCollection){ 43 DBCursor cursor = dbCollection.find(); 44 while(cursor.hasNext()){ 45 dbCollection.remove(cursor.next()); 46 } 47 }