Mongo學習之旅(四,聚合查詢)

    之前一直介紹的是Mongo的簡單查詢,在真實的業(yè)務(wù)中,我們可能會設(shè)計到各種的聚合查詢,接下來我們簡單的介紹以下Mongo中的聚合查詢,之后會涉及到Mongo中的一些腳本介紹。

聚合查詢

在以往的系型數(shù)據(jù)庫中,聚合查詢可能是這樣子的

SELECT ID FROM USER GROUP ID 

但是在Mongo中我們將用到的是aggregate()方法,aggregate方法的基本語法格式如下

db.collection_name.aggregate(AGGREGATE_OPERATION)

下面我將通過一個簡單的例子來展示aggregate方法的使用.

準備數(shù)據(jù)

準備一個study_book集合,插入一下數(shù)據(jù):

db.study_book.insertMany([{
   _id: ObjectId("7df78ad8902c"),
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId("7df78ad8902d"),
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId("7df78ad8902e"),
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
}])

查詢

接下來我們通過aggregate方法統(tǒng)計每個作者寫的文章數(shù)量

db.study_book.aggregate({
    $group: {
        _id: "$by_user",
        counts: {$sum: 1}
    }
})

以上語句類似與

select by_user, count(*) from study_book group by by_user

執(zhí)行結(jié)果為:

image.png

解釋:Mongo中聚合是通過管道的形式來定義的,一個管道包含了多個處理階段。上面的命令僅涉及group的操作。
下面展示多個階段操作:

管道

db.study_book.aggregate([
    {$group: { _id: "$by_user", counts: {$sum: 1}}},
    {$sort: {counts : -1}}
])

該語句執(zhí)行結(jié)果如下:


image.png

上面的命令涉及到了兩個階段(stage) ----group(分組)和sort(排序),其中:

  • group階段實現(xiàn)了按指定字段(by_user)的分組計算,sum:1表示按每個文檔累計1進行統(tǒng)計。
  • sort階段在分組之后,按照分組計算的結(jié)果輸出,并負責完成排序。

更多操作可以參考下面這張表格:

Mongo中的聚合表達式:

image.png

參考

https://www.runoob.com/mongodb/mongodb-aggregate.html
https://weread.qq.com/web/reader/f1232340724708a1f128522

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容