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