<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
先來一個常見的錯誤資訊:
Due to limitations of the com.mongodb.BasicDocument, you can't add a second '$and' expression specified as '$and :
錯誤原因:
在一個 Criteria 物件中呼叫了多次 andOperator() 方法
多個條件的查詢只需要建立 Query 物件,然後把需要新增的條件使用 Query 物件的 addCriteria() 方法
// 場景:查詢指定時間段內,狀態為1的資料 // 入參條件 :beginTime ,endTime ,statue // mongodb欄位:time , state // 存放條件的物件 Query condition= new Query(); // 判斷時間是否為空 if(beginTime != null && endTime != null){ // 新增大於開始時間小於結束時間的條件 condition.addCriteria(Criteria.where("time").gte(beginTime).lte(endTime)); }else{ // 其中一個為空 分別進行判斷 if(beginTime != null){ condition.addCriteria(Criteria.where("time").gte(beginTime)); } if(endTime != null){ condition.addCriteria(Criteria.where("time").lte(endTime)); } } // 新增狀態為1條件 if(statue!=null){ condition.addCriteria(Criteria.where("state").is(statue)); }
條件有了後再呼叫 mongoTemplate.find(condition,返回型別.class,collectionName)
但是...想要分組,得呼叫 mongoTemplate.group(Criteria criteria , String inputCollectionName , GroupBy groupBy , Class<T> entityClass) 方法 (不是說只能這樣才能分組,而是我通過這種方法實現了分組查詢)
朋友們,第一個引數條件只能入參 Criteria 物件,而不能入參 Query 物件
結果我發現 Criteria 物件有 andOperator(Criteria ... criteria) 方法
這個方法就厲害了,可以入引陣列,也就是說
我們可以把查詢條件先存放到一個集合裡面(因為陣列需要定義長度,如果條件個數不確定,就不能直接定義陣列),然後把集合放入陣列中,再把陣列入參 andOperator(Criteria ... criteria) 方法
// 場景:查詢指定時間段內,狀態為1的資料 // 入參條件 :beginTime ,endTime ,statue // mongodb欄位:time , state // 定義一個存放條件的集合 List<Criteria> criteriaList = new ArrayList<>(); // 定義一個存放條件的陣列(暫時不給長度) Criteria[] criteriaArray = {}; // 判斷時間是否為空 if(beginTime != null && endTime != null){ // 新增大於開始時間小於結束時間的條件 Criteria between = Criteria.where("time").gte(beginTime).lte(endTime); criteriaList.add(between); }else{ // 其中一個為空 分別進行判斷 if(beginTime != null){ Criteria gte = Criteria.where("time").gte(beginTime); criteriaList.add(gte); } if(endTime != null){ Criteria lte = Criteria.where("time").lte(endTime); criteriaList.add(lte); } } // 新增狀態為1條件 if(statue!=null){ Criteria isState = Criteria.where("state").is(statue); criteriaList.add(isState); } // 如果有條件 if(criteriaList.size()>0){ // 集合的個數就是陣列的長度 criteriaArray = new Criteria[criteriaList.size()]; // 遍歷新增到陣列中 for(int i = 0 ; i<criteriaList.size(); i++){ criteriaArray[i] = criteriaList.get(i); } }
這種就可以呼叫 mongoTemplate.group(Criteria criteria , String inputCollectionName , GroupBy groupBy , Class<T> entityClass) 方法進行分組查詢了
GroupBy groupBy = new GroupBy("分組欄位") .initialDocument("{ count: 0 }") .reduceFunction("function (doc,pre){pre.count +=1 ;}"); // new Criteria().andOperator(criteriaArray) 這個是很關鍵的一步操作,把剛剛的條件陣列放入進入 // groupByResults 這個物件裡面內容很多,有興趣的朋友可以斷點進入看一下 GroupByResults groupByResults = mongoTemplate. group(new Criteria().andOperator(criteriaArray), mongodb的collectionName, groupBy, 實體類.class); // 獲取分組後的數量 long resultCount = ((List)groupByResults.getRawResults().get("retval")).size();
Aggregation agg = Aggregation.newAggregation( Aggregation.match(new Criteria().orOperator(new Criteria("to").is(ukey), new Criteria().and("fromAccount").is(ukey))), Aggregation.sort(Sort.Direction.DESC,"_id"), Aggregation.group("to","fromAccount") );
Aggregation.group 要排在Aggregation.match後面,否則結果集不準確。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45