java對MongoDB3.4.2進行增刪改條件查詢操作
阿新 • • 發佈:2018-12-24
一段完整的MongoDB基本操作Demo,實現了連線資料庫,進行增刪改查操作,其中條件查詢實現了與sql中and和or查詢
public class MongoDBJDBC { public static void main(String[] args){ MongoClient mongoClient=null; BasicDBObject cond=null; BasicDBList condList =null; 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("使用者名稱", "使用者所屬資料庫", "密碼".toCharArray()); List<MongoCredential> credentials = new ArrayList<MongoCredential>(); credentials.add(credential); //通過連線認證獲取MongoDB連線 mongoClient = new MongoClient(addrs,credentials); //連線到資料庫 MongoDatabase mongoDatabase = mongoClient.getDatabase("要獲取的資料庫名"); System.out.println("Connect to database successfully"); //獲取集合 引數為“集合名稱” MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("要獲取的集合名"); 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", 300). append("by", "Flyer"); List<Document> documents = new ArrayList<Document>(); documents.add(document); //增加文件方法 mongoCollection.insertMany(documents);//將含有多個document的List插入到資料庫中,可以含有一個或多個,如果只插入一個document也可以用insertOne(document)代替 System.out.println("Document inserted successfully"); //刪除符合條件的第一個文件 //mongoCollection.deleteOne(Filters.eq("likes", 200)); //刪除所有符合條件的文件 //mongoCollection.deleteMany (Filters.eq("likes", 300)); //檢索檢視結果 FindIterable<Document> findIterable = mongoCollection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); } //條件查詢 cond = new BasicDBObject(); condList=new BasicDBList();//BasicDBList和"$in"作為BasicDBObject引數使用,有點類似or
condList.add((new BasicDBObject("likes", new BasicDBObject("$gt", 100))));
condList.add((new BasicDBObject("likes", new BasicDBObject("$lt", 500))));
cond.put("$or", condList);//多個條件or的實現方法,此處測試MongoDB3.4.2驅動也為3.4.2其中$gt與$gte和$lt與$lte效果一樣,可能是bug
condList.add(300); condList.add(200); cond.put("likes",new BasicDBObject("$in",condList));//如果likes欄位的值為上面新增到BasicDBList物件condList中的值則符合查詢條件 cond.put("by","Flyer");//put多個不同規則相當於and操作 cond.put("likes",200); cond.put("likes",300);//如果後新增的規則欄位是一樣的則後面put的查詢條件覆蓋前面的查詢條件 FindIterable<Document> findIterable2 = mongoCollection.find(cond); MongoCursor<Document> mongoCursor2 = findIterable2.iterator(); System.out.println("以下結果測試and條件查詢"); while(mongoCursor2.hasNext()){ System.out.println(mongoCursor2.next()); } FindIterable<Document> findIterable3 = mongoCollection.find(Filters.eq("likes", 300));//如果只有一個條件可以用這樣的形式 MongoCursor<Document> mongoCursor3 = findIterable3.iterator(); System.out.println("以2下2結2果2測2試2條2件2查2詢"); while(mongoCursor3.hasNext()){ Document d=mongoCursor3.next(); System.out.println("like的值為"+d.get("likes")); } } catch (Exception e) { System.out.println("MongoDBJDBC.java:出錯了出錯了出錯了"); System.err.println( e.getClass().getName() + ": " + e.getMessage() ); }finally{ mongoClient.close(); //關閉MongoDB的連線 } } }