mongoDB中聚合(aggregate)的具體使用


先來看一個分組的例子,本例中$group是一個管道操作符,獲得的結果可以接着輸出到下一個管道,而內部的$sum是一個表達式操作符。

參考鏈接

https://www.jianshu.com/p/72fc4409936c

用$group 舉個例子

將document分組,用作統計結果
```
    db.Ubisoft.aggregate([ // aggregate方法接收的是一個數組
        {
            $group: {
                _id: '$time', 
                num: {$sum: 1}
            }
        }
    ])
    // 這里的_id字段表示你要基於哪個字段來進行分組(即制定字段值相同的為一組),這里的$time就表示要基於time字段來進行分組

    // 下面的num字段的值$sum: 1表示的是獲取滿足time字段相同的這一組的數量乘以后面給定的值(本例為1,那么就是同組的數量)。
```

 

那么看完這個例子之后,mongoDB中還有其他的一些管道操作符和表達式操作符:

管道操作符

常用管道    含義
$group    將collection中的document分組,可用於統計結果
$match    過濾數據,只輸出符合結果的文檔
$project    修改輸入文檔的結構(例如重命名,增加、刪除字段,創建結算結果等)
$sort    將結果進行排序后輸出
$limit    限制管道輸出的結果個數
$skip    跳過制定數量的結果,並且返回剩下的結果
$unwind    將數組類型的字段進行拆分

 

表達式操作符

常用表達式    含義
$sum    計算總和,{$sum: 1}表示返回總和×1的值(即總和的數量),使用{$sum: '$制定字段'}也能直接獲取制定字段的值的總和
$avg    平均值
$min    min
$max    max
$push    將結果文檔中插入值到一個數組中
$first    根據文檔的排序獲取第一個文檔數據
$last    同理,獲取最后一個數據
 

我們現在來試試其他的表達式操作符:

#數據結果
/* 1 */
{
    "_id" : ObjectId("5b0cf67270e4fa02d31de42e"),
    "name" : "rainbowSix Siege",
    "time" : 400.0
}

/* 2 */
{
    "_id" : ObjectId("5b0cf69270e4fa02d31de42f"),
    "name" : "Assassin's creed",
    "time" : 20.0
}

/* 3 */
{
    "_id" : ObjectId("5b0cf6ad70e4fa02d31de430"),
    "name" : "ghost Recon",
    "time" : 0.0
}

/* 4 */
{
    "_id" : ObjectId("5b0d14c870e4fa02d31de436"),
    "name" : "farCry",
    "time" : 0.0
}
# 查詢方法push
  db.Ubisoft.aggregate([
       {
           $group: {
               _id: '$time',
               gameName: {$push: '$name'}
           }
       }
   ]) 

   ]) 
返回結果為:
/* 1 */
{
    "_id" : 20.0,
    "gameName" : [ 
        "Assassin's creed"
    ]
}

/* 2 */
{
    "_id" : 0.0,
    "gameName" : [ 
        "ghost Recon", 
        "farCry"
    ]
}

/* 3 */
{
    "_id" : 400.0,
    "gameName" : [ 
        "rainbowSix Siege"
    ]
}     

 


免責聲明!

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



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