1. 程式人生 > >Mongodb 根據時間分組查詢出要顯示的資料並進行分頁

Mongodb 根據時間分組查詢出要顯示的資料並進行分頁

MongoDB提供聚合管道技術進行處理輸入的資料,資料經過一個一個的stage,每個stage將資料處理後的結果傳遞給下一個stage,最終得到多重處理後的結果。 

Aggregate提供了多種stage可供選擇,match、match、sort、limit、limit、limit等。對於巢狀資料的處理可以在Aggregate中實現,減少在程式碼上的編寫

上篇文章介紹了Mongodb按照時間天進行分組,但是返回的資料是統計的效果,不能得到自己想要的資料。

今天來介紹一下如何對天進行分組後,還能獲取到自己想要顯示的資料並進行分頁。

根據業務的需求,對會員ID進行分組,並獲取會員的手機,地址等等

// 查詢條件
 Criteria criteria = Criteria.where("欄位").is(傳參);

 List<Order> sortOrders = new ArrayList<Order>();
        sortOrders.add(new Order(Direction.DESC, "count"));// 降序
  MatchOperation matchOper = Aggregation.match(criteria);// 查詢條件

    // 聚合統計,按照memberId欄位聚合,count計數顯示資料
   // group("memberId","browseTime")按會員和瀏覽時間排序
//自己想得到顯示的資料
  AggregationOperation aggOper = Aggregation.group("memberId").count().as("count")
                    .first("memberId").as("memberId")
                    .first("browseMemberId").as("browseMemberId")
                    .first("browseTime").as("browseTime")
                    .first("companyName").as("companyName")
                    .first("memberlevel").as("memberlevel");

  AggregationOperation aggSort = Aggregation.sort(new Sort(sortOrders));// 排序欄位
    
    // 分頁操作,pageNumber為當前頁數,pageSize為每頁顯示條數
   AggregationOperation aggPageSkip = Aggregation.skip((int) ((page.getPage() - 1) * page.getRows()));
   AggregationOperation aggPagelimit = Aggregation.limit(page.getRows());
//聚合管道
  Aggregation agg = Aggregation.newAggregation(matchOper, aggOper, aggSort, aggPageSkip, aggPagelimit);
 //得到結果集    
   AggregationResults<Map> results = mongoTemplate.aggregate(agg, TradeBrowseDto.class, Map.class);

    List<Map> listVehicleSensors = results.getMappedResults();

總結:

聚合管道在處理巢狀資料時,可以對一個文件進行多重處理。輸入資料為一條,多次處理,每次處理後將結果直接傳遞給下一個stage,最終得到一個輸出結果;

在處理巢狀文件時提供很大遍歷;

提供兩個集合之間聯合查詢的介面。

相關推薦

Mongodb 根據時間分組查詢顯示資料進行

MongoDB提供聚合管道技術進行處理輸入的資料,資料經過一個一個的stage,每個stage將資料處理後的結果傳遞給下一個stage,最終得到多重處理後的結果。  Aggregate提供了多種stage可供選擇,match、match、sort、limit、limit、l

前臺jsp獲取後臺查詢的結果集資料實現顯示

前臺獲取後臺查詢的結果並分頁顯示。 1、使用ajax非同步請求,傳送post請求到url,獲取結果引數data(data被dao層處理成json物件返回) 2、返回的結果: 在dao處理後(根據userId查詢結果集)向service返回的結果,是一個json物件:re

jeesite框架學習——對查詢結果為Map的集合進行顯示

工作中用到jeesite框架,對該框架可以說是零掌握,專案組做一個分頁顯示的功能,因為顯示的資料只是表中的某一個欄位,所以在使用jeesite封裝好的分頁功能時對其進行了二次開發(jeesite原始碼還沒研究過,也不知道我這算不算是二次開發),記錄下來主要是以後自己如果用到

SSM整合(用json,easyui,spring實現從資料庫查詢資訊進行

首先建一張資料庫表向裡面錄入一些資訊: CREATE TABLE `userinfo` ( `userid` INT (11), `userName` VARCHAR (180), `userSex` CHAR (27), `userAge` INT (

mongodb按照時間分組統計

get text .com hour dateutil private sub agg pri 使用spring data mongodb v1.8需求1、數據結構如下。說明:改集合記錄的是公司各個系統的訪問情況(localPath表示系統,requestTime 表示請求

sql函數: 多級樹狀目錄-OA信用盤源碼下載根據父ID查詢所有的子ID

reat mes 部門 rtm table rip rec ins etime 比如說部門,OA信用盤源碼下載聯系方式:QQ:2747044651 網址http://zhengtuwl.com 有上級部門,是多級的,需要根據部門ID查詢出所有該部門的子部門。

根據某個條件或者某些條件對資料庫進行查詢,然後把查詢結果進行顯示

一、.固定條件,直接查詢資料庫,把結果進行分頁顯示出來; 見部落格 https://blog.csdn.net/qq_37591637/article/details/82951647 二、條件不定,查詢資料庫,把查詢結果進行分頁顯示 如下圖;包含四個條件,使用者在選擇的時候可以選擇

MySQL根據時間條件查詢資料

有時我們面要統計一下資料庫中指定日期的資料,如常用的,今天,昨天,明天,本週、上週、本月、上個月份的資料,還有對日期的加減, 除了我們可以使用strtotime來算還可以參考下面方法。   SQL減去指定天數 SELECT * from 表名 where DATE

linux find根據時間條件查詢檔案

find / -amin -10 # 查詢在系統中最後10分鐘訪問的檔案find / -atime -2 # 查詢在系統中最後48小時訪問的檔案find / -mmin -5 # 查詢在系統中最後5分鐘裡修改過的檔案find / -mtime -1 #查詢在系統中最後24小時

Mongodb聚合 時間分組

查詢collection中,按天分組,每天的資料數量,並按照數量count倒序 // Requires official MongoShell 3.6+ use MediaNetDB; db.getCollection("TestCollection").aggregate( [

java操作mongodb根據關鍵字分組統計個數

部分需求需要在mongodb的集合中按照關鍵字分組並統計出個數,如:一個集合裡是所有公司的資訊,然後在前端頁面中需要展示公司的分佈情況,這時就需要後端對公司所在的城市分組求和,然後給出每個城市中公司的數量。這個操作就需要mongodb的聚合函數了(aggregate); 舉個例子,集合中有公

sqlserver中如何實現時間按月,日,小時等時間分組查詢

--按照月份統計select count(id) cnt,datepart(mm,time) [Month]from [table]where [time] between '2007/09/08 09:10:43' and '2007/10/09 04:32:37'gro

mysql根據時間查詢資料

比如我們要查詢每天的註冊使用者數量,這裡我們的註冊時間是時間戳的話。我們寫的sql語句就得把時間轉換為日期進行查詢。sql語句如下: 函式:FROM_UNIXTIME "select count(*) user_regnumber,FROM_UNIXTIME

Oracle中根據時間範圍查詢資料

1、當時間條件欄位為字串型別的時候,通過以下方法查詢資料: 1.1、SELECT * FROM 表名 t WHERE 1=1 AND to_date(t.tkdat,'yyyy/MM/dd') between to_date('2017/8/1','yyyy/MM/dd')

thinkphp根據時間查詢時間範圍內的記錄

這是獲取當月月初和月末的時間戳 $beginThismonth=mktime(0,0,0,date('m'),1,date('Y')); $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y')); //p

oracle中根據時間獲取最新的一條資料

1、select kd.CREATEUSERID as userid,kd.LOCATION,kd.createtime as location from KT_DEVICESTRACK kd where rownum=1 order by kd.createtime 2、SELECT *

使用兩個dateTimePicker 根據日期區間查詢資料庫中的資料

資料庫中的資料形式為XXXX年XX月XX日 1、在資料庫中建立一個提取數字的方法: IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION DBO.GET_NUMBER GO CREATE FUNCTION

MySql分組查詢(group by)計算對應的欄位之和及兩個欄位相乘之後的和

有表如下: 需求:求出每一種商品(goods_id)的數量(goods_num)之和及單價(goods_price)乘以數量之和 sql 語句:SELECT sum(goods_pirce*goods_num) AS price_amount,sum(goods_num)

hibernate(jpa)根據實體動態生成查詢條件,實現問題的解決方案

hibernate如何根據傳進去實體的不為空屬性生成動態查詢,並實現分頁,經過檢視hibernate api需要用到Criteria ,但是Criteria 有個缺點就是當另一個表A中某一外來鍵列是該表B的主鍵,如果A表中有兩條記錄對應B表的某一主鍵,則查詢結果中B表的該記錄

kettle從mysql中查詢特定的資料然後傳送郵件附件到指定的郵箱。

剛開始接觸kettle,還是小白,但是感覺這東西挺強大。 做了一個傳送附件excel到指定郵箱的demo。現在記錄如下。 1. 2. 3. . 4.job檔案 新建job檔案,在空白處設定屬性 5.拖入以下按鈕 設定郵件引數 到這裡應該就差不多了,執行成功的截