MongoDB 中的 SELECT COUNT GROUP BY

Tahseen Tauseef 2024年2月15日
  1. MongoDB 中的操作
  2. 聚合操作
  3. MongoDB GROUP BYCOUNT
  4. MongoDB GROUP BYCOUNTSORT
  5. MongoDB GROUP BYCOUNT 多個欄位
  6. MongoDB GROUP BY 日期和 COUNT
  7. 具有單個欄位的 MongoDB GROUP BYCOUNT
  8. 具有多個欄位的 MongoDB GROUP BYCOUNT
  9. MongoDB GROUP BYCOUNT 使用帶有多個欄位的欄位進行排序
  10. MongoDB GROUP BYCOUNT 使用多個欄位進行排序
MongoDB 中的 SELECT COUNT GROUP BY

在本文中,將討論 MongoDB 中的函式。此外,將詳細指出聚合函式。

我們將詳細解釋在 MongoDB 中對 Group 的多個和單個欄位進行計數和排序的不同方法。

MongoDB 中的操作

允許使用者瀏覽、搜尋和更改資料庫元素的使用者介面原則稱為 CRUD 操作。

連線到伺服器、查詢相應的文件、在將資料傳送回資料庫進行處理之前進行修改以及更改設定屬性是修改 MongoDB 文件的方式。

CRUD 是一個使用 HTTP 動作動詞標準化的資料驅動過程。以下是 CRUD 操作及其用途。

  1. Create 操作在 MongoDB 資料庫中插入新文件。
  2. Read 操作查詢資料庫中的文件。
  3. Update 操作修改資料庫中的現有文件。
  4. Delete 操作刪除資料庫中的文件。

聚合操作

它是一種資料處理操作,由多個階段組成,這些階段對分組資料執行多個操作以提供單個輸出。下面給出了執行聚合操作的三種方法:

聚合管道

文件被送入一個多級管道,將它們組合成一個輸出。MongoDB 聚合過程有幾個階段。

例子:

db.collection_name.aggregate([

   //First stage
   { $match: { status: "" } },

   //Second stage
   { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },

   //Third Stage
    { $sort : {sort_field: -1 }}

])

單一目的聚合方法

單一用途的聚合方法很簡單,但缺乏聚合管道的功能。

Map-Reduce 過程

從 MongoDB 5.0 開始,不推薦使用 map-reduce 過程。請改用聚合管道。

MongoDB GROUP BYCOUNT

MongoDB 中每個文件的 _id 欄位都已按值分配了一個唯一的組。然後,資料由聚合過程處理,提供計算結果。

下面給出一個例子。在這裡,你可以看到資料庫的配置。

此配置將用於本文提供的所有程式碼示例。

db={
    "data": [
    {
        "_id": ObjectId("611a99100a3322fc1bd8c38b"),
        "fname": "Tom",
        "city": "United States of America",
        "courses": [
            "c#",
            "asp",
            "node"
        ]
    },
    {
        "_id": ObjectId("611a99340a3322fc1bd8c38c"),
        "fname": "Harry",
        "city": "Canada",
        "courses": [
            "python",
            "asp",
            "node"
        ]
    },
    {
        "_id": ObjectId("611a99510a3322fc1bd8c38d"),
        "fname": "Mikky",
        "city": "New Zealand",
        "courses": [
            "python",
            "asp",
            "c++"
        ]
    },
    {
        "_id": ObjectId("611b3e88a60b5002406571c3"),
        "fname": "Ron",
        "city": "United Kingdom",
        "courses": [
            "python",
            "django",
            "node"
        ]
    }
    ]
}

使用的上述資料庫的查詢是:

db.data.aggregate([
{
    $group: {
        _id: "ObjectId",
        count: {
            $count: {}
        }
    }
}
])

檢查此連結以瞭解上述執行情況以檢視此程式碼段的工作情況。

通過…分組

MongoDB GROUP BYCOUNTSORT

$sortByCount 在該組中被 count 排序主題使用,它與 $group 相同,加上 $sort.。它可以用於對一個組進行升序和降序排序和計數。

在下面的示例中,一些文件被新增到資料集合中。find() 函式用於檢視它有多少條記錄。

find() 的查詢將是:

db.data.find()

你可以從此連結訪問此查詢的工作。

下一步是展開``courses 陣列並使用 $sortByCount 函式計算新增到每個課程的文件數量。此步驟的查詢是:

db.data.aggregate([
{
    $unwind: "$courses"
},
{
    $sortByCount: "$courses"
}
])

單擊此連結以檢視此查詢與上述資料庫配置的工作情況。

這是 MongoDB 對陣列進行分組、計數和排序的最直接的方法。

按 2 分組

MongoDB GROUP BYCOUNT 多個欄位

你可以利用 MongoDB 中的 aggregate() 方法來計算許多欄位。因此,$count 用於對欄位進行計數。

下面給出了一個示例,其中時間戳僅用於一個條目。在這個例子中,一些論文可以儲存在 student 集合中,你可以利用 find() 函式來確定你有多少文件。

db.student.aggregate([ {$group: {_id: {name:"$name",
                                         timestamp:"$timestamp" }}},
                                        {$count:"timestamp"}
                      ])

這個查詢的工作可以通過這個連結訪問。

MongoDB GROUP BY 日期和 COUNT

當你想要計算特定日期文件時,你可以使用計數聚合並計算特定日期文件。

在下面的示例中,你將學習計算 2021 年每一天的總銷售額和銷售額。

你可以在銷售集合中新增欄位產品 ID、專案名稱、價格、數量和日期。find() 函式可以獲取文件。

db=
{
        "_id" : 1,
        "item" : "abc",
        "price" : NumberDecimal("10"),
        "quantity" : 2,
        "date" : ISODate("2021-03-01T08:00:00Z")
}
{
        "_id" : 2,
        "item" : "jkl",
        "price" : NumberDecimal("20"),
        "quantity" : 1,
        "date" : ISODate("2021-03-01T09:00:00Z")
}
{
        "_id" : 3,
        "item" : "xyz",
        "price" : NumberDecimal("5"),
        "quantity" : 10,
        "date" : ISODate("2021-03-15T09:00:00Z")
}
{
        "_id" : 4,
        "item" : "xyz",
        "price" : NumberDecimal("5"),
        "quantity" : 20,
        "date" : ISODate("2021-04-04T11:21:39.736Z")
}
{
        "_id" : 5,
        "item" : "abc",
        "price" : NumberDecimal("10"),
        "quantity" : 10,
        "date" : ISODate("2021-04-04T21:23:13.331Z")
}

上述配置的查詢將是:

db.date.aggregate([
{
    $match : { "date": { $gte: new ISODate("2021-01-01"), $lt: new ISODate("2015-01-01") } }
},

{
    $group : {
        _id : { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
        totalSaleAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } },

        count: { $sum: 1 }
    }
},
{
    $sort : { totalSaleAmount: -1 }
}
])

現在使用 COUNT 和 FIELD 命令在下面給出單個欄位組和多個欄位組的查詢。

具有單個欄位的 MongoDB GROUP BYCOUNT

db.Request.aggregate([{'$group': {_id: '$source', count: {$sum: 1}}}])

具有多個欄位的 MongoDB GROUP BYCOUNT

db.Request.aggregate([
  {'$group': {_id: {source: '$source', status: '$status'}, count: {$sum: 1}}}
])

MongoDB GROUP BYCOUNT 使用帶有多個欄位的欄位進行排序

db.Request.aggregate([
  {'$group': {_id: {source: '$source', status: '$status'}, count: {$sum: 1}}},
  {$sort: {'_id.source': 1}}
])

MongoDB GROUP BYCOUNT 使用多個欄位進行排序

db.Request.aggregate([
  {'$group': {_id: {source: '$source', status: '$status'}, count: {$sum: 1}}},
  {$sort: {'count': -1}}
])

本文詳細討論了操作,也討論了聚合操作。首先,用程式碼段簡要討論了不同型別的聚合函式。

然後討論了 GROUP BYCOUNT,包括排序、查詢和多個欄位。然後使用 field 和 count 命令討論 GROUP BYCOUNT