1. 程式人生 > >深入學習MongoDB之聚合函式

深入學習MongoDB之聚合函式

集合中的資料有
/* 1 */
{
    "_id" : ObjectId("5b496ee9497e95fe15e0b935"),
    "name" : "李四",
    "age" : NumberLong(12),
    "major" : "math",
    "address" : "北京海淀區"
}

/* 2 */
{
    "_id" : ObjectId("5b4995e824cd61fde7f581ee"),
    "name" : "張三",
    "age" : NumberLong(18),
    "address" : "紐約"
}

/* 3 */
{
    "_id" : ObjectId("5b497360497e95fe15e0b93e"),
    "name" : "bingo",
    "age" : NumberLong(19),
    "major" : "computer",
    "address" : "上海"
}

/* 4 */
{
    "_id" : ObjectId("5b496f81497e95fe15e0b936"),
    "name" : "haha",
    "age" : NumberLong(21),
    "major" : "chinese",
    "address" : "天津"
}

/* 5 */
{
    "_id" : ObjectId("5b499bf37c9fa794f8424f58"),
    "name" : "yuyuyu",
    "age" : NumberLong(40),
    "address" : "紐約"
}

/* 6 */
{
    "_id" : ObjectId("5b4995c77c9fa794f8424f57"),
    "name" : "張三",
    "age" : "18",
    "address" : "紐約"
}

/* 7 */
{
    "_id" : ObjectId("5b496f9d497e95fe15e0b937"),
    "name" : "sank",
    "age" : "22",
    "major" : "computer",
    "address" : "天津"
}

聚合基本語法
db.getCollection("test").aggregate(option)

count操作:
db.getCollection("test").count(<query>)聚合寫法:
db.getCollection("test").aggregate({$group:{_id:null,count:{$sum:1}}})
分組count:
db.getCollection("test").aggregate({$group:{_id:"$address",count:{$sum:1}}})
分組sum:
db.getCollection("test").aggregate({$group:{_id:"$address",sumage:{$sum:"$age"}}})
分組avg:
db.getCollection("test").aggregate({$group:{_id:"$address",avg:{$avg:"$age"}}})


常見的聚合表示式表示式    描述    例項
$sum    計算總和。    db.mycol.aggregate([{$group : {_id : "$name", num_tutorial : {$sum : "$age"}}}])
$avg    計算平均值    db.mycol.aggregate([{$group : {_id : "$name", num_tutorial : {$avg : "$age"}}}])
$min    獲取集合中所有文件對應值得最小值。    db.mycol.aggregate([{$group : {_id : "$name", num_tutorial : {$min : "$age"}}}])
$max    獲取集合中所有文件對應值得最大值。    db.mycol.aggregate([{$group : {_id : "$name", num_tutorial : {$max : "$age"}}}])
$push    在結果文件中插入值到一個數組中。    db.mycol.aggregate([{$group : {_id : "$name", url : {$push: "$url"}}}])
$addToSet    在結果文件中插入值到一個數組中,但不建立副本。    db.mycol.aggregate([{$group : {_id : "$name", url : {$addToSet : "$url"}}}])
$first    根據資源文件的排序獲取第一個文件資料。    db.mycol.aggregate([{$group : {_id : "$name", first_url : {$first : "$url"}}}])
$last    根據資源文件的排序獲取最後一個文件資料    db.mycol.aggregate([{$group : {_id : "$name", last_url : {$last : "$url"}}}])


管道概念,MongoDB聚合管道在一個管道處理後交給下一個管道,下面是常用的管道操作:     $project:修改輸入文件的結構。可以用來重新命名、增加或刪除域,也可以用於建立計算結果以及巢狀文件。
    $match:用於過濾資料,只輸出符合條件的文件。$match使用MongoDB的標準查詢操作。
    $limit:用來限制MongoDB聚合管道返回的文件數。
    $skip:在聚合管道中跳過指定數量的文件,並返回餘下的文件。
    $unwind:將文件中的某一個數組型別欄位拆分成多條,每條包含陣列中的一個值。
    $group:將集合中的文件分組,可用於統計結果。
    $sort:將輸入文件排序後輸出。
    $geoNear:輸出接近某一地理位置的有序文件。

示例:
db.getCollection("test").aggregate({$project:{name:1,age:1}})返回值取name和age聚合match 後 group
db.getCollection("test").aggregate({$match:{age:{$gt:10,$lte:20}}},{$group:{_id:"$address",avg:{$avg:"$age"}}})
篩選後分組
相當於where sth group by sth

db.getCollection("test").aggregate({$group:{_id:"$address",avg:{$avg:"$age"}}},{$match:{avg:{$gt:10,$lte:20}}})
分組後篩選
相當於 group by sth having sth

db.getCollection("test").aggregate(
{$group:{_id:"$address",avg:{$avg:"$age"}}},
{$match:{avg:{$gt:10,$lte:20}}},
{$sort:{avg:1}}
)
分組後篩選再排序
相當於group by sth having sth order by sth


相關推薦

深入學習MongoDB聚合函式

集合中的資料有/* 1 */{    "_id" : ObjectId("5b496ee9497e95fe15e0b935"),    "name" : "李四",    "age" : NumberLong(12),    "major" : "math",    "add

深入學習JavaScript函式作用域與塊作用域

  我們將作用域比作氣泡,一層巢狀一層,每一個氣泡裡面都可以放置識別符號(函式,變數)的定義,這些氣泡在書寫階段就已經確定了。   但是,究竟是什麼生成了一個新的氣泡,只有函式能夠生成氣泡嗎?JavaScipt中的其他結構能生成作用域氣泡嗎? 1.1  函式中的

每天一篇,深入學習MongoDB復制集

每天一篇 mit bind child col ats net 快樂 tco 復制集概念: 復制集是額外的數據副本,是跨多個服務器同步數據的過程,提供了冗余並增加了數據的可用性,通過它可以對硬件故障和中斷的服務進行數據恢復 復制集工作原理: MongoDB復制集最少需要兩個

c++學習筆記成員函式

學了c++才知道什麼是面向物件什麼是面向過程。幼稚的我曾經還覺得c++和C語言差不多,接觸之後才知道c++是多麼的難,光類和物件這個知識點就看了一天。什麼建構函式解構函式,物件陣列物件成員弄得我頭大,現在才知道為什麼老師說c++是最難的語言,學c++就是在地獄裡磨鍊,從地獄出來就是天堂,會有會當凌絕

深入學習JavaScript物件

在JavaScript中,很多人都存在著一種誤解,認為JavaScript中萬物皆為物件,但是這其實是錯誤的。 1.1  語法   在JavaScript中定義物件有兩種語法。   ①文字形式(宣告形式):    

深入學習JavaScript初識this

  JavaScript是一個詞法作用域的程式語言,詞法作用域和動態作用域的區別我也說過了,具體在我的《深入理解JavaScript之詞法域》https://blog.csdn.net/qq_41889956/article/details/83061472中有介紹,   總

深入學習JavaScript閉包

  接下來需要對之前我們學的作用域原理來一個清晰的認識。 此例中,外部函式指的是包括了內部函式的函式 1.1   閉包的是什麼?   閉包是基於詞法作用域書寫程式碼時所產生的自然結果,閉包是一個晦澀難懂的概念。它準確點來說是,函式和建立該函式的詞法

深入學習JavaScript提升

 或許你在編寫JavaScript時,會注意到這麼一個現象,宣告的出現與其作用域內的操作位置有微妙的關係,  有人認為JavaScript引擎執行程式碼是從上到下一行一行執行的。實際上這不全對 例如: a=2; var a; cons

深入學習JavaScript詞法域

  在上一章,我們講到,我們將作用域比作一套規則,這套規則用於管理引擎在當前作用域及其子作用域下根據識別符號名稱進行變數查詢。   在深入理解作用域之前我們先了解兩個概念:動態作用域、詞法作用域    詞法分析域:作用域在詞法階段就已經建立了,它的作用

JavaScript 學習筆記 原生函式

原生函式是什麼 JavaScript的原生函式也叫內建函式 例如 String(),Number(),Boolean()等 原生函式可以被當做建構函式來使用 但通過建構函式(如new String("abc"))創建出來的是封裝了基本型別值("abc")的封裝物件

java操作mongodb聚合函式

資料庫資料如下: 上程式碼: public static void main(String[] args) { UserDao userDao = new UserDao(); userDao.juhe(); } public void juhe()

機器學習筆記函式

基本概念 核函式定義: 核函式:是對映關係的內積,對映函式本身僅僅是一種對映關係,並沒有增加維度的特性,不過可以利用核函式的特性,構造可以增加維度的核函式,這通常是我們希望的。 例如這樣一個圖,資料集不是線性可分的: 該資料集在二維空間中,

MySQL聚合函式查詢

本文主要介紹一些關於聚合函式查詢的語句。 create table `t_grade` ( `id` int , `stuName` varchar (60), `course` varchar

sql聚合函式使用總結

Having是一個經常與聚合函式搭配使用的關鍵字。它的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚合函式什麼是聚合函式?聚合函式一般會出現在哪?顧名思義,聚合函式就是按照某種規則將特定欄位進行規約,常見的聚合函式如:(1)求個數:count(2)求總和:su

mongodb聚合函式的$project方法運用。

譯自:http://docs.mongoing.com/manual-zh/reference/operator/aggregation/project.html 例項如下: db.books.insert( {   "_id" : 1,   title: "abc123"

深入學習Hadoop第二篇——MapReduce

概念:MapReduce是一種資料處理的程式設計模型 一、Map 1.資料流: 一個MapReduce job是客戶端所執行的work的單元,它包括:輸入資料、MapReduce程式以及配置資訊;

Hive學習之內建聚合函式

聚合函式 下表為Hive內建的聚合函式。 返回型別 函式名 描述 BIGINT count(*) count(expr) count(DISTINCT expr[, expr_.]) count(*) – 返回檢索到的行的總數,包括含有NULL值的行

jmeter學習指南聚合報告

上一篇文章中我們講了Jmeter結果分析最常用的一個Listener檢視結果樹, 今天接著講另一個最常用的listener--聚合報告Aggregate Report。我們先來看看聚合報告中的主要名稱的含意:Label:每個請求的名稱#Samples:各請求發出的數量Average:平均響應時間(單位:

TensorFlow學習筆記——常用函式(概覽)

本文章內容比較繁雜,主要是一些比較常用的函式的用法,結合了網上的資料和原始碼,還有我自己寫的示例程式碼。建議照著目錄來看。1.矩陣操作1.1矩陣生成這部分主要將如何生成矩陣,包括全0矩陣,全1矩陣,隨機數矩陣,常數矩陣等tf.ones | tf.zeros tf.ones(

MySQL聚合函式和日期資料型別的使用

》MAX()/MIN()             求最大值/最小值 》AVG()                        返回數值列的平均值》SUM()                       返回數值列的和 》COUNT()                 返回