1. 程式人生 > >java對MongoDB3.4.2進行增刪改條件查詢操作

java對MongoDB3.4.2進行增刪改條件查詢操作

一段完整的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的連線 
        }  
        
    }  
}