MongoDB聚合( aggregate() 方法)


  在MongoDB中,聚合(aggregate)主要用於處理數據(比如統計平均值、求和等),返回計算后的數據結果。

aggregate 語法

aggregate() 方法的基本語法格式如下所示:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 

簡單用法

1、集合中的數據如下:

2、使用 aggregate() 計算每個作者所寫的文章數 —— 使用表達式 “$sum : 1” 計算每個作者對應的文檔數。如下:

以上實例類似sql語句: select by_user, count(*) from mycol group by by_user

在上面的例子中,我們通過字段by_user字段對數據進行分組,並計算by_user字段相同值的總和。

MongoDB 聚合表達式

高級用法 -- 管道

管道概念:在Unix和Linux中一般用於將當前命令的輸出結果作為下一個命令的輸入參數。

MongoDB的聚合(aggregate)管道將MongoDB文檔在一個管道處理完畢后將結果傳遞給下一個管道處理。

1、MongoDB 聚合框架中常用的幾個操作:

  • $project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用於創建計算結果以及嵌套文檔。
  • $match:用於過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標准查詢操作。
  • $limit:用來限制MongoDB聚合管道返回的文檔數。
  • $skip:在聚合管道中跳過指定數量的文檔,並返回余下的文檔。
  • $unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
  • $group:將集合中的文檔分組,可用於統計結果。
  • $sort:將輸入文檔排序后輸出。

2、管道操作符實例

db.resume.aggregate(
[
    {$match:{delete_status:false,work_experiences:{$ne:null}}},
    {$sort:{"refresh_time":-1}},
    {$project:{"work_experiences":{$slice:["$work_experiences", -1]},count:{$size:'$work_experiences'}}},
    {$match:{count:{$gt:1}}},
    {$match:{"work_experiences.industry":/^02./}},
    {$project:{_id:1}}
])

 

參考文檔:https://www.mongodb.org.cn/tutorial/33.html

$slice 說明:http://www.javashuo.com/article/p-qnlhnyqv-ez.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM