Java MongoDb分組的實現、動態條件過濾、模糊查詢
阿新 • • 發佈:2019-02-18
本章主要講mongoDb的分組(aggregate)等部分問題在java中的實現,如下:
1.分組的實現
2.動態設定過濾條件
3.模糊查詢
1.分組的實現
我使用的mongo的java驅動包,pom.xml檔案需新增依賴:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</dependency>
獲取資料庫連線
//獲取到資料庫連線 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); //連線到相應資料庫下的表 MongoCollection<Document> collection = mongoClient.getDatabase(dbName).getCollection(collName);
拿到資料庫集合後,就可以對集合進行分組聚合了
collection.aggregate(Arrays.asList( //對集合進行條件過濾 Aggregates.match(Filters.and( Filters.in("id",idList.toArray()), Filters.gte("time",startTime), Filters.lte("time",endTime)) ), //對id進行分組統計記錄數量 Aggregates.group("$id", Accumulators.sum("total", 1) ) )).forEach(new Block<Document>(){ @Override public void apply(Document t) { //這裡可以對分組後的集合做其他操作 } } );
2.動態設定過濾條件
這裡主要用在一些查詢條件按需要過濾(例如有時候可能需要按名字過濾,有時候不用的情況),遇上這種情況,我們需要把如上的分組查詢的Aggregates.match()中的條件提取,進行設定以達到動態設定過濾條件的效果;
BasicDBObject Filter=new BasicDBObject(); if(Boolean.TRUE){ BasicDBObject[] array = { new BasicDBObject("time", new BasicDBObject("$gte",simpleDateFormat.parse(start))), new BasicDBObject("time", new BasicDBObject("$lte",simpleDateFormat.parse(end))) }; }else{ BasicDBObject[] array = { new BasicDBObject("time", new BasicDBObject("$lte",simpleDateFormat.parse(end))) }; } Filter.put("$and", array);
通過對Filter的自由組裝過濾條件達到效果
3.模糊查詢
String pattern = "廣州";
BasicDBObject[] array = {
new BasicDBObject("name", new BasicDBObject("$regex",pattern).append("$options", "i"))
};