迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

MongoDB 中的 SELECT COUNT GROUP BY

作者:迹忆客 最近更新:2023/03/17 浏览次数:

在本文中,将讨论 MongoDB 中的函数。此外,将详细指出聚合函数。

我们将详细解释在 MongoDB 中对 Group 的多个和单个字段进行计数和排序的不同方法。

MongoDB 中的操作

允许用户浏览、搜索和更改数据库元素的用户界面原则称为 CRUD 操作。

连接到服务器、查询相应的文档、在将数据发送回数据库进行处理之前进行修改以及更改设置属性是修改 MongoDB 文档的方式。

CRUD 是一个使用 HTTP 动作动词标准化的数据驱动过程。以下是 CRUD 操作及其用途。

聚合操作

它是一种数据处理操作,由多个阶段组成,这些阶段对分组数据执行多个操作以提供单个输出。下面给出了执行聚合操作的三种方法:

聚合管道

文档被送入一个多级管道,将它们组合成一个输出。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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 MongoDB Shell 中列出所有数据库

发布时间:2023/05/11 浏览次数:180 分类:MongoDB

交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。

MongoDB 中检查字段包含的字符串

发布时间:2023/05/11 浏览次数:1024 分类:MongoDB

这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。

在 MongoDB 中 upsert 更新插入

发布时间:2023/05/11 浏览次数:214 分类:MongoDB

在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。

如何卸载 MongoDB

发布时间:2023/05/11 浏览次数:745 分类:MongoDB

要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便

在 MongoDB 中存储日期和时间

发布时间:2023/05/11 浏览次数:762 分类:MongoDB

本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。

MongoDB 按 ID 查找

发布时间:2023/05/11 浏览次数:1856 分类:MongoDB

MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。

检查 MongoDB 服务器是否正在运行

发布时间:2023/05/11 浏览次数:247 分类:MongoDB

这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。

MongoDB 中的分页

发布时间:2023/05/11 浏览次数:174 分类:MongoDB

这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。

MongoDB 从查询开始

发布时间:2023/05/11 浏览次数:186 分类:MongoDB

在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便