mongodb 聚合 组内排序

2024-08-27 16:08
文章标签 排序 mongodb 组内 聚合

本文主要是介绍mongodb 聚合 组内排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境

mongodb:3.4
java: 1.7

前言

今天遇到的需求,使得我需要在聚合分组中的组内进行排序。

网上搜索了一番,mongodb并没有组内排序的关键字。好像sql有;
瞬间对mongodb有点失望。
后来仔细想想,虽然数据库层面没有具体关键字去实现,但是,我们可以在写管道时,控制好顺序是可以实现组内排序的;

数据

假设我们现在有下面这样的数据:

这里写图片描述

每个奖项名为一组,每组都有名次,希望按照这些名次进行排序。

思路

虽然mongodb并没有提供组内排序的相应字段;
我们可以先对奖项名称进行排序,这样就把相同奖项都排列到一起了。
此时我们再对名次进行排序,这样就实现了对组内的排序。

代码

基于我的业务的完整的代码

db.newfortune_best_analyst.aggregate([
{$match:{year:2017}},
//{$sort:{awardcode:-1,ranking:1}},
{$sort:{awardcode:-1}},
{$group:{_id:{code:"$awardcode",ranking:"$ranking"}, organ_name:{$push:"$organ_name"}, awardcode:{$first:"$awardcode"},awardname:{$first:"$awardname"}, ranking:{$first:"$ranking"}}},
{$sort:{awardcode:-1,ranking:1}},
])

讲解:

{$sort:{awardcode:-1}},

这个排序很关键,其会对奖项编号进行排序;
原本我是{$sort:{awardcode:-1,ranking:1}},这么写的,
但是后面的ranking在下个管道$group分组中使用$addToSet后,顺序就会发生变化,
所以还不如不用。

_id:{code:"$awardcode",ranking:"$ranking"}

之后,再按照奖项编号和名次进行分组,
但是此时得到数据,由于分组的原因,组内的顺序变化了;
所以我们需要在最后再次进行排序,这样就是我们想要的数据。

{$sort:{awardcode:-1,ranking:1}},

效果:

这里写图片描述

总结

组内分组 通过一些技巧还是可以实现的;
第一步,把分组的主键都归在一起,再去聚合排序,就可以;

这篇关于mongodb 聚合 组内排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112139

相关文章

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更