MongoDB中的group

在Mongodb的查询中,有类似于SQL中group by功能的group函数.两者的功能有些类似,但是区别也是比较明显的.

对于SQL来说,group by的作用就是安装依据列来将数据表中的记录分成一个个的组,而查询结果中,只能Select出来Group BY中含有的列,或者使用了聚合函数(sum,count,avg,max,min)的其它列.并且只能在数值类型上的列上使用聚合函数.

但是,在Mongodb中,我们可以在结果中显示既非Group by中的列,又没有使用聚合函数的列.这样,我们就能得到一个组内的更加详细的信息.而在SQL中要做到这点,需借助子查询等其它复杂的手段才能做到.

Mongodb的group函数,更像是一个定义好了各个中间步骤的模板方法,使用者以函数或者其他形式来参与中间的各个步骤.首先,key属性用来指定分组的依据列.至于列名后面的true/false参数,有介绍说是用来决定是否展示每个分组的依据列的列名的.但是,在我目前使用的版本上,是没有任何区别的,一般就设置为true.之后,就是开始执行的各个步骤.

  1. initial.初始化分组用的累加器.如果我们在结果中需要分组依赖列之外的列,那么可以把这些列放入分组的累加器中.所谓累加器,可以是一个对象或者数组.每一个分组会有一个累加器对象.
  2. $reduce.当一条记录被添加到一个分组中时被调用.回调函数的形式是function(cur,perv).其中,cur是当前记录的对象,perv是上一次$reduce函数执行时分组文档对象.
    • 这个函数是添加附加信息的关键函数.分组文档对象,包含了一个分组的所有信息,我们在initial中声明的累加器,就是该对象的一个属性,我们可以对该对象添加任何的属性,该对象的所有属性都会被作为结果显示出来.
    • 由于每个分组都有一个文档对象,可以很方便地在文档对象中记录该分组的详细信息.记录的信息都存储在cur对象上(该对象是数据行的映射,含有各个数据列的值).
  3. finalize.当一个分组被处理完毕时被调用.回调函数的形式是function(doc).参数doc就是该分组的文档对象.如果我们需要做统计分组的记录count之类的信息,可以写在该函数内.

现在,使用MS SQL和Mongodb的实际gourp操作来说明两者的区别.

首先,在MS SQL和Mongodb中创建相同的表(表名为person),并插入相同的数据.

 

  • 现在,我们要求按照性别分组.
  1. 在SQL中
  2. 在Mongodb中
接着,需要知道每个分组中的人的数目.
  1. 在SQL中. 
  2. 在Mongodb中
把分组中每个人的Name查询出来,在SQL中,需要借助其他的手段,这里只演示Mongodb中的做法.
同时记录分组内的人数,和组内人的Name.有两种方式可以实现.
  •  

 

转载于:https://www.cnblogs.com/robyn/p/3748054.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在C#使用MongoDB的聚合函数时,语法是先分组再排序的。这与一些其他数据库的语法规则可能不同。如果你在MongoDB反过来写,会导致编译错误。所以在使用聚合函数时,请确保按照正确的顺序编写代码。\[1\] 另外,如果你想在C#调用MongoDB的聚合函数,你可以使用MongoDB的官方驱动程序。你可以通过连接到MongoDB数据库,然后使用聚合管道来执行group by操作。以下是一个示例代码片段,展示了如何在C#使用MongoDB的聚合函数: ```csharp public static void GroupByFunction() { var client = new MongoClient("mongodb://localhost:27017"); var database = client.GetDatabase("yourDatabaseName"); var collection = database.GetCollection<BsonDocument>("yourCollectionName"); var pipeline = new BsonDocument\[\] { new BsonDocument("$group", new BsonDocument { { "_id", "$yourGroupByField" }, { "count", new BsonDocument("$sum", 1) } }), new BsonDocument("$sort", new BsonDocument { { "count", -1 } }) }; var result = collection.Aggregate<BsonDocument>(pipeline).ToList(); foreach (var document in result) { Console.WriteLine(document); } } ``` 在上面的示例,我们首先创建了一个MongoClient对象,然后连接到MongoDB数据库。接下来,我们获取了要操作的集合。然后,我们定义了一个聚合管道,其包含了group和sort操作。最后,我们使用Aggregate方法执行聚合操作,并将结果打印出来。请注意,你需要根据你的实际情况修改代码数据库名称、集合名称和分组字段。\[2\] 希望这个解答能够帮到你!如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* [C#使用MongoDB学习笔记(四):在C#使用聚合函数](https://blog.csdn.net/a882557/article/details/101148871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C#代码利用MongoDBGroup聚合函数查询](https://blog.csdn.net/weixin_34205826/article/details/86192354)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mongoDB聚合函数](https://blog.csdn.net/Best_Lynn/article/details/125007333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值