1. 程式人生 > >Java MongoDb分組的實現、動態條件過濾、模糊查詢

Java MongoDb分組的實現、動態條件過濾、模糊查詢

本章主要講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"))
 };