MongoDB分組查詢(mongogroupby)

在開發中,我們常常需要對某個集合內的數據進行聚合操作或統計分析。MongoDB提供了豐富的聚合操作函數,其中分組查詢是其中最常用也是最重要的一個操作。

一、基本概念

所謂分組,就是將相同的數據按照指定的字段進行歸類,然後進行聚合操作。以學生數據為例,我們可以按照學生的年級字段進行分組,然後統計每個年級的學生人數、平均分等信息。

db.student.aggregate([
    {
        $group: {
            _id: "$grade",     //按照年級字段分組
            count: { $sum: 1 } //計算每組的學生數量
        }
    }
])

上面的代碼通過aggregate函數實現了分組查詢,首先指定了要分組的字段,這裡是grade字段。然後定義了要統計的信息,這裡僅統計每組的學生數量。

二、基本操作符

1、$sum

$sum用於計算指定字段的總和,僅能用於數值類型字段。例如,統計每個年級的總分數:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            totalScore: { $sum: "$score" } //計算每組的總分數
        }
    }
])

2、$avg

$avg用於計算指定字段的平均值,僅能用於數值類型字段。例如,統計每個年級的平均分數:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            avgScore: { $avg: "$score" } //計算每組的平均分數
        }
    }
])

3、$min

$min用於求指定字段的最小值。例如,統計每個年級的最低分數:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            minScore: { $min: "$score" } //計算每組的最低分數
        }
    }
])

4、$max

$max用於求指定字段的最大值。例如,統計每個年級的最高分數:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            maxScore: { $max: "$score" } //計算每組的最高分數
        }
    }
])

三、進階操作符

1、$push

$push用於將指定字段的值插入一個數組中,可以用於統計每組包含哪些學生的數據。例如:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            students: { $push: "$name" } //將每組的學生姓名插入數組中
        }
    }
])

執行結果中,每個年級的結果中都包含了一個數組,在數組中保存了該年級的所有學生的姓名。

2、$addToSet

$addToSet也用於將指定字段的值插入一個數組中,但與$push不同的是,$addToSet保證數組中的元素不重複。例如:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            subjects: { $addToSet: "$subject" } //將每組的課程名稱插入數組中
        }
    }
])

執行結果中,每個年級的結果中都包含了一個數組,在數組中保存了該年級包含的所有課程名稱,且不重複。

3、$first、$last

$first和$last分別用於在每個分組中,獲取某個指定字段的第一個和最後一個值。例如,統計每個年級第一名和最後一名的成績:

db.student.aggregate([
    {
        $group: {
            _id: "$grade",
            firstScore: { $first: "$score" }, //每組的第一名成績
            lastScore: { $last: "$score" }    //每組的最後一名成績
        }
    }
])

四、多字段分組

除了按照單個字段進行分組外,還可以按照多個字段進行分組。例如,統計每個年級每門課程的平均成績:

db.student.aggregate([
    {
        $group: {
            _id: { grade: "$grade", subject: "$subject" }, //按照多個字段分組
            avgScore: { $avg: "$score" } //計算每組的平均分數
        }
    }
])

首先定義了_id字段,該字段同時包含了grade和subject字段。然後再定義了要統計的信息,這裡是每組的平均分數。

五、分組操作前的過濾

在進行分組查詢前,我們可以通過$match操作符對原始數據進行過濾,只保留符合條件的數據。

db.student.aggregate([
    {
        $match: { subject: "Math" } //篩選出課程為Math的數據
    },
    {
        $group: {
            _id: "$grade",     //按照年級字段分組
            count: { $sum: 1 } //計算每組的學生數量
        }
    }
])

上述代碼先通過$match操作符,篩選出了課程為Math的數據,然後再進行分組查詢。

六、總結

分組查詢是MongoDB中最常用也是最重要的操作之一,通過使用豐富的操作符,我們可以對原始數據進行靈活的聚合操作和統計分析。在實際使用中,我們通常會將分組查詢與其他操作符(如$project、$sort等)結合使用,以實現更複雜的數據處理需求。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/186559.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-27 05:46
下一篇 2024-11-27 05:46

相關推薦

  • Python連接MongoDB數據庫

    MongoDB是一個流行的開源、非關係型、文檔型數據庫。Python具有簡單、易學的語法、廣泛的應用能力,因此它很適合連接MongoDB數據庫。本文將從以下幾個方面詳細討論Pyth…

    編程 2025-04-25
  • MongoDB使用詳解

    一、什麼是MongoDB? MongoDB是一個基於分佈式文件存儲的NoSQL數據庫。 與傳統關係型數據庫不同,MongoDB沒有固定表結構,採用文檔存儲方式。文檔是JSON格式的…

    編程 2025-04-24
  • Linux MongoDB安裝指南

    一、安裝前的準備工作 在安裝 MongoDB 之前,我們需要進行以下準備工作: 1、檢查是否已經安裝了 MongoDB。可以通過運行命令:mongod –version…

    編程 2025-04-23
  • MongoDB連接池詳解

    MongoDB連接池是一個重要的組件,可以優化MongoDB的訪問性能和資源利用率。在本文中,我們從多個方面探討MongoDB連接池的配置、錯誤、模式、大小、參數設置和代碼實現步驟…

    編程 2025-04-23
  • Linux下安裝MongoDB教程

    一、下載MongoDB MongoDB是一個跨平台、面向文檔的NoSQL數據庫管理系統。首先,我們需要下載MongoDB的安裝包。 1、打開MongoDB官網(https://ww…

    編程 2025-04-23
  • Spring Boot集成MongoDB

    一、Spring Boot集成MongoDB多數據源 在Spring Boot中集成MongoDB多數據源需要配置多個MongoTemplate和多個MongoDbFactory。…

    編程 2025-04-23
  • MongoDB BSON介紹

    一、BSON的概念及優勢 BSON(Binary JSON)是一種二進制的JSON格式。與JSON一樣,BSON也是一種用於數據交換的文檔存儲格式。但是,BSON比JSON更具優勢…

    編程 2025-04-22
  • MongoDB多表查詢詳解

    一、MongoDB多表查詢速度慢 MongoDB多表查詢是一種非關係型數據庫查詢方式。雖然MongoDB具有多項強大的特性,如高可擴展性、更好的讀寫性能、複雜數據結構的支持等,但在…

    編程 2025-04-22
  • MongoDB增刪改查詳解

    一、MongoDB的介紹 MongoDB是一種開源文檔數據庫,具有高性能、高可用性和易擴展性的特性,可以運行在Linux、Windows和Mac等操作系統上,是互聯網應用開發中廣泛…

    編程 2025-04-13
  • MongoDB菜鳥教程全面解析

    一、概述 MongoDB是一款非關係型數據庫,具有高性能、高可用、易擴展等特點。本教程旨在為初學者介紹MongoDB的基本概念、使用方法和應用場景。 二、安裝和配置 安裝Mongo…

    編程 2025-04-13

發表回復

登錄後才能評論