MongoDB aggregate 運用篇


基礎知識

操作符介紹:

$project:包含、排除、重命名和顯示字段
$match:查詢,需要同find()一樣的參數
$limit:限制結果數量
$skip:忽略結果的數量
$sort:按照給定的字段排序結果
$group:按照給定表達式組合結果
$unwind:分割嵌入數組到自己頂層文件
$sum 總結從集合中的所有文件所定義的值. $avg 從所有文檔集合中所有給定值計算的平均. $min 獲取集合中的所有文件中的相應值最小. $max 獲取集合中的所有文件中的相應值的最大. $push 值插入到一個數組生成文檔中. $addToSet 值插入到一個數組中所得到的文檔,但不會創建重復. $first 根據分組從源文檔中獲取的第一個文檔。通常情況下,這才有意義,連同以前的一些應用 “$sort”-stage. $last 根據分組從源文檔中獲取最后的文檔。通常,這才有意義,連同以前的一些應用 “$sort”-stage.

 文檔:MongoDB 官方aggregate說明。

 

相關使用:

db.collection.aggregate([array]);

array可是是任何一個或多個操作符。

group和match的用法,使用過sqlserver,group的用法很好理解,根據指定列進行分組統計,可以統計分組的數量,也能統計分組中的和或者平均值等。

group之前的match,是對源數據進行查詢,group之后的match是對group之后的數據進行篩選;

同理,sort,skip,limit也是同樣的原理;

{_id:1,name:"a",status:1,num:1}
{_id:2,name:"a",status:0,num:2}
{_id:3,name:"b",status:1,num:3} {_id:4,name:"c",status:1,num:4} {_id:5,name:"d",status:1,num:5}

以下是示例:

應用一:統計name的數量和總數;

db.collection.aggregate([
  {$group:{_id:"$name",count:{$sum:1},total:{$sum:"$num"}}
]);

  

應用二:統計status=1的name的數量;

db.collection.aggregate([
  {$match:{status:1}},
  {$group:{_id:"$name",count:{$sum:1}}}
]);

  

應用三:統計name的數量,並且數量為小於2的;

db.collection.aggregate([
  {$group:{_id:"$name",count:{$sum:1}},
  {$match:{count:{$lt:2}}}
]);

  

應用四:統計stauts=1的name的數量,並且數量為1的;

db.collection.aggregate([
  {$match:{status:1}},
  {$group:{_id:"$name",count:{$sum:1}}},
  {$match:{count:1}}
]);

  

多列group,根據name和status進行多列

db.collection.aggregate([
  {$group:{_id:{name:"$name",st:"$status"},count:{$sum:1}}}
]);

  

$project該操作符很簡單,

db.collection.aggregate([
  {$project:{name:1,status:1}}
]);

  

結果是,只有_id,name,status三個字段的表數據,相當於sql表達式 select _id,name,status from collection

$unwind

這個操作符可以將一個數組的文檔拆分為多條文檔。

以上基本就可以實現大部分統計了,group前條件,group后條件,是重點。


免責聲明!

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



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