MongoDB数据库在数据存储和操作方面发挥了重要作用。为了组织数据,我们创建组来将同类数据聚集在一个地方。分组可以基于不同的属性,无论是从计数变量还是任何其他特征。本教程将解释如何根据文件的不同字段来创建组。
为了实现根据多字段分组的现象,我们需要在数据库中拥有一些数据。我们将首先创建一个数据库。这是通过用关键词 "使用 "声明数据库的名称来完成的。在这个实现中,我们使用一个数据库 "demo"。
>> USEdemo
一旦完成了数据库的创建,数据将被插入到数据库中。而对于数据的输入,我们使用的是创建 "集合",这些是容器,在其中存储无限的数据,发挥着重要作用。在同一时间,我们可以在一个数据库中创建许多集合。这里我们将创建一个名字为 "info "的数据库。
>>Db.createCollection('info')
MongoDB的响应将是,"ok";它是对创建集合的确认。集合中的数据是逐行输入的。所以我们将向集合中插入数据。由于这些数据将在实例中进一步使用,以根据不同的字段创建组,所以我们输入了许多行。每次都会给每行分配一个不同的ID。
>> db.info.insertOne({"Name":"Savid",
"Age":28,
"Gender":"Male",
"Country":"United States of America" })

同样地,所有的数据都将被插入。你可以通过使用find()命令看到所有插入的数据
>>db.info.find().pretty()

例子1:按多个字段/属性分组
当我们在数据库中有一大组数据,但我们想对其中的几个数据进行查看,那么为了这个目的,可以找到"符号表示变量。现在在上述信息集合上应用一个查询。
一个基于ID的组将被创建。然后,只有年龄和性别的文件被选中显示。而整个数据,包括姓名和国家,则被删除。这在某种程度上是一个过滤器,用来限制数据的显示。
>>db.info.aggregation (\[ {$group:{\_id:{age:"$Age",gender:"$Gender" } }\] )

你可以看到,我们通过将数据限制在两个属性中,根据id对每一行进行分组。
例2:通过应用一个条件对多个字段进行分组
这指的是根据一个特定的条件对文件进行分组。我们将在两个属性上创建一个组,在组创建之后,我们将添加一个计数变量来计算特定文档的值的出现。而且,我们还添加了一个排序的顺序。
首先,让我们显示我们的集合 "new "中的文档。我们已经创建了一个集合,并在前面按照上面描述的相同步骤向其中添加了数据。我们将只通过find()函数显示集合中的所有项目。

该查询将首先包含组的部分。该组是根据id创建的;university和level是我们希望得到显示的两个基本属性。我们使用的变量从集合中获取数值,然后将其分配给查询变量。所有的值和条件都没有直接写在命令中。
在创建组之后,条件被应用;它是根据每个文件的级别进行计数和计算的。之后,这个答案将按降序排列。这是通过sort()函数完成的。这个函数只包含两个参数;对于升序值,它是1,而对于降序值,它是-1。
>>db.new.aggregate(\[ {$group:{ \_id: { "university":"$university", "level":"$level"}, "levelCount":{"$sum": 1}}},{"$sort":{"levelCount":\-1}}\])

降序将显示,数量较大的级别将首先被显示,然后较小的级别文件被显示在后面。
例3:MongoDb BUCKET按多个字段分组
顾名思义,就是根据bucket来找组。这是通过创建Bucket聚合来完成的。水桶聚合是将文件归类为组的过程。这个组的作用就像水桶一样。每个文件都是根据具体的表达方式来划分的。
为了详细说明这个概念,我们将看一下我们已经创建的一个集合,现在我们将把这些命令应用到这个集合中。我们创建了一个 "draw "集合,它存储了关于一个人的基本信息。我们已经显示了之前输入到集合中的所有4行。

在上述数据中,我们将应用一个命令来创建一个以年份为属性的桶(组)来分组数据。我们还创建了边界,其中提到了出生和死亡的年份。在这个命令中应用的条件包括计数变量来计算出现的次数。我们还在这里使用了连接方法,将第一个和第二个名字都合并为字符串。此外,还将显示出生年份。id取决于年份。

当我们计算这个查询时,结果值将显示两行被分组,取决于我们所创建的年龄界限。

结论
在这篇文章中,通过演示在分组创建中的聚合操作的工作,阐述了MongoDB的分组功能取决于多个单一字段。没有聚合功能,任何分组功能都是不完整的。分组功能是直接通过不同的字段来限制整个数据的暴露。通过多个字段的分组也是通过应用一个特定的条件来完成的。最后,我们描述了创建一个包含更多项目的水桶组,就像一个水桶。