MongoDB聚合运算符:$denseRank

$denseRank聚合运算符返回在$setWindowFields阶段分区中文档的排名,排名的顺序由$setWindowFields阶段sortBy的字段值决定。

语法

{ $denseRank: { } }

$denseRank不需要任何参数。

使用

$rank$denseRank的不同点在于他们处理排序字段重复值的方式不同,如:排序字段的值有:7、9、9、10:

  • $denseRank排名的值为1、2、2、3,重复值9的排名都是2,10的值则排名为3,所有的排名值都是连续的。
  • $rank排名的值为1、2、2、4,重复值9的排名都为2,但是10的排名为4,中间有一个跳过的排名3。

对于排序字段为值为null或字段值缺失的情况,排名基于BSON比较顺序。

举例

使用下面的脚本创建cakeSales集合:

db.cakeSales.insertMany( [{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),state: "CA", price: 13, quantity: 120 },{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),state: "WA", price: 14, quantity: 140 },{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),state: "CA", price: 12, quantity: 145 },{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),state: "WA", price: 13, quantity: 104 },{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),state: "CA", price: 41, quantity: 162 },{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),state: "WA", price: 43, quantity: 134 }
] )

按整数字段进行密集排名分区

下面的例子在$setWindowFields阶段使用$denseRank依据quantity得出各州蛋糕销售的密集等级

db.cakeSales.aggregate( [{$setWindowFields: {partitionBy: "$state",sortBy: { quantity: -1 },output: {denseRankQuantityForState: {$denseRank: {}}}}}
] )
  • partitionBy: "state"依据state字段对文档进行分区,有CAWA两个分区
  • sortBy:{quantity:-1}依据quantity对分区内的文档按照从大到小进行排序,quantity最大的排在最前面
  • output使用$densRankquantity字段的密度排名赋予denseRankOrderDateForState字段,结果如下:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"),"state" : "CA", "price" : 41, "quantity" : 162, "denseRankQuantityForState" : 1 }
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"),"state" : "CA", "price" : 12, "quantity" : 145, "denseRankQuantityForState" : 2 }
{ "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"),"state" : "CA", "price" : 13, "quantity" : 120, "denseRankQuantityForState" : 3 }
{ "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"),"state" : "WA", "price" : 14, "quantity" : 140, "denseRankQuantityForState" : 1 }
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"),"state" : "WA", "price" : 43, "quantity" : 134, "denseRankQuantityForState" : 2 }
{ "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"),"state" : "WA", "price" : 13, "quantity" : 104, "denseRankQuantityForState" : 3 }

按日期字段进行密集排名分区

下面的例子在$setWindowFields阶段使用$denseRank依据orderDate得出各州蛋糕销售的密集等级

db.cakeSales.aggregate( [{$setWindowFields: {partitionBy: "$state",sortBy: { orderDate: 1 },output: {denseRankOrderDateForState: {$denseRank: {}}}}}
] )
  • partitionBy: "state"依据state字段对文档进行分区,有CAWA两个分区
  • sortBy:{orderDate:-1}依据orderDate对分区内的文档按照从小到大进行排序,orderDate最早的排在最前面
  • output使用$densRankorderDate字段的密度排名赋予denseRankOrderDateForState字段,结果如下:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"),"state" : "CA", "price" : 41, "quantity" : 162, "denseRankOrderDateForState" : 1 }
{ "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"),"state" : "CA", "price" : 13, "quantity" : 120, "denseRankOrderDateForState" : 2 }
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"),"state" : "CA", "price" : 12, "quantity" : 145, "denseRankOrderDateForState" : 3 }
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"),"state" : "WA", "price" : 43, "quantity" : 134, "denseRankOrderDateForState" : 1 }
{ "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"),"state" : "WA", "price" : 13, "quantity" : 104, "denseRankOrderDateForState" : 2 }
{ "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"),"state" : "WA", "price" : 14, "quantity" : 140, "denseRankOrderDateForState" : 3 }

重复值、null和字段缺失值的密度排名

创建一个cakeSalesWithDuplicates集合:

db.cakeSalesWithDuplicates.insertMany( [{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),state: "CA", price: 13, quantity: 120 },{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),state: "WA", price: 14, quantity: 140 },{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),state: "CA", price: 12, quantity: 145 },{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),state: "WA", price: 13, quantity: 104 },{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),state: "CA", price: 41, quantity: 162 },{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),state: "WA", price: 43, quantity: 134 },{ _id: 6, type: "strawberry", orderDate: new Date("2020-01-08T06:12:03Z"),state: "WA", price: 41, quantity: 134 },{ _id: 7, type: "strawberry", orderDate: new Date("2020-01-01T06:12:03Z"),state: "WA", price: 34, quantity: 134 },{ _id: 8, type: "strawberry", orderDate: new Date("2020-01-02T06:12:03Z"),state: "WA", price: 40, quantity: 134 },{ _id: 9, type: "strawberry", orderDate: new Date("2020-05-11T16:09:01Z"),state: "CA", price: 39, quantity: 162 },{ _id: 10, type: "strawberry", orderDate: new Date("2020-05-11T16:09:01Z"),state: "CA", price: 39, quantity: null },{ _id: 11, type: "strawberry", orderDate: new Date("2020-05-11T16:09:01Z"),state: "CA", price: 39 }
] )

在集合中:

  • 蛋糕销售的地点有加利福尼亚州(CA)和华盛顿州(WA)
  • 文档6到8与文档5的quantitystate相同
  • 文档9与文档4的quantitystate相同
  • 文档10的quantitynull
  • 文档11的quantity字段缺失

下面的例子在$setWindowFields阶段使用$denseRank依据quantitycakeSalesWithDuplicates集合文档进行密度排名:

db.cakeSalesWithDuplicates.aggregate( [{$setWindowFields: {partitionBy: "$state",sortBy: { quantity: -1 },output: {denseRankQuantityForState: {$denseRank: {}}}}}
] )

在本例中:

  • partitionBy: "state"依据state字段对文档进行分区,有CAWA两个分区
  • sortBy:{quantity:-1}依据quantity对分区内的文档按照从大到小进行排序,quantity最大的排在最前面
  • output使用$densRankquantity字段的密度排名赋予denseRankOrderDateForState字段,结果如下:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"),"state" : "CA", "price" : 41, "quantity" : 162, "denseRankQuantityForState" : 1 }
{ "_id" : 9, "type" : "strawberry", "orderDate" : ISODate("2020-05-11T16:09:01Z"),"state" : "CA", "price" : 39, "quantity" : 162, "denseRankQuantityForState" : 1 }
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"),"state" : "CA", "price" : 12, "quantity" : 145, "denseRankQuantityForState" : 2 }
{ "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"),"state" : "CA", "price" : 13, "quantity" : 120, "denseRankQuantityForState" : 3 }
{ "_id" : 10, "type" : "strawberry", "orderDate" : ISODate("2020-05-11T16:09:01Z"),"state" : "CA", "price" : 39, "quantity" : null, "denseRankQuantityForState" : 4 }
{ "_id" : 11, "type" : "strawberry", "orderDate" : ISODate("2020-05-11T16:09:01Z"),"state" : "CA", "price" : 39, "denseRankQuantityForState" : 5 }
{ "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"),"state" : "WA", "price" : 14, "quantity" : 140, "denseRankQuantityForState" : 1 }
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"),"state" : "WA", "price" : 43, "quantity" : 134, "denseRankQuantityForState" : 2 }
{ "_id" : 6, "type" : "strawberry", "orderDate" : ISODate("2020-01-08T06:12:03Z"),"state" : "WA", "price" : 41, "quantity" : 134, "denseRankQuantityForState" : 2 }
{ "_id" : 7, "type" : "strawberry", "orderDate" : ISODate("2020-01-01T06:12:03Z"),"state" : "WA", "price" : 34, "quantity" : 134, "denseRankQuantityForState" : 2 }
{ "_id" : 8, "type" : "strawberry", "orderDate" : ISODate("2020-01-02T06:12:03Z"),"state" : "WA", "price" : 40, "quantity" : 134, "denseRankQuantityForState" : 2 }
{ "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"),"state" : "WA", "price" : 13, "quantity" : 104, "denseRankQuantityForState" : 3 }

从上面的结果可以看出:

  • 数量和状态相同的文件具有相同的排名,排名是连续的
  • 在 CA 分区的输出中,数量为空的文档和数量为缺失的文档排序最低。这种排序是 BSON 比较顺序的结果,在本例中,将空值和缺失值排序在数字值之后。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式、开发板 智能音响 OpenHarmony GPT 大模型 智能硬件

一、概述 生活场景的引入: 物联网的快速发展,各种智能设备层出不穷,作为极客,家里早已安上了用 APP 控制的智能灯、智能插座,刚刚安装上的时候,还有新鲜感,久了之后,是不是会有这样的现象: 早上醒来要开灯,需要经过: 迷迷糊糊从床头柜上摸到手机手机用指纹解锁连接无…

3.11 log | 739. 每日温度,

739. 每日温度&#xff0c;496.下一个更大元素 I&#xff0c;503.下一个更大元素II&#xff0c; class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;vector<int> result(temperatures.size(),0)…

Hadoop学习1:概述、单体搭建、伪分布式搭建

文章目录 概述基础知识Hadoop组件构成Hadoop配置文件 环境准备配置Hadoop配置下载配置环境变量 Hadoop运行模式Standalone Operation&#xff08;本地&#xff09;官方DemoWordCount单词统计Demo Pseudo-Distributed Operation&#xff08;伪分布式模式&#xff09;配置修改启动…

Bootstrap5(display显示、flex布局相关属性、浮动、定位、文本、栅格系统)

类中缀的设置技巧 1.当多个连续品目使用一个样式时&#xff0c;则给最小的设置即可。 比如&#xff1a;大屏以上内边距都是3&#xff1a;p-lh-3 2.超小屏不设置类中缀的样式 比如超小屏内边距时1&#xff0c;小屏内边距时2&#xff0c;中屏及以上内边距是3 p-1 p-sm-2 p-md-3 …

WPF 界面刷新问题 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改

WPF 界面刷新问题 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改 问题描述&#xff1a; 在子线程中操作界面控件的数据源出现以下错误&#xff1a;System.NotSupportedException:“该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCo…

【Python】新手入门学习:什么是相对路径?

【Python】新手入门学习&#xff1a;什么是相对路径&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得…

【Echarts】柱状图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

linux 环境安装nvm

linux 环境安装nvm 1、安装方式 # 方式1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 方式2 【推荐】 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash2、创建nvm命令目录 mkdir -p ~/.nvm3、编…

StringBuilder --java学习笔记

StringBuilder 代表可变字符串对象&#xff0c;相当于是一个容器&#xff0c;它里面装的字符串是可以改变的&#xff0c;就是用来操作字符串的StringBuilder比String更适合做字符串的修改操作&#xff0c;效率会更高&#xff0c;代码也会更简洁 StringBuilder的常用构造器和方…

C++操作树莓派的RTC时钟

概述 RTC实时时钟通常是指一个集成电路&#xff0c;RTC本质上是一个独立的定时器&#xff0c;通常情况下需要外接一个32.768KHZ的晶振和匹配电容&#xff08;10~33pf&#xff09;&#xff0c;由于时间是不停止的&#xff0c;为了满足这一要求&#xff0c;所以RTC实时时钟有两种…

idea2023和历史版本的下载

1.idea中文官网 idea官网历史版本下载(https://www.jetbrains.com.cn/idea/download/other.html)

基于SpringBoot的“学生成绩管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“学生成绩管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面图 管理员功能界面图 学生管理界面图…

蓝桥杯2019年第十届省赛真题-修改数组

查重类题目&#xff0c;想到用标记数组记录是否出现过 但是最坏情况下可能会从头找到小尾巴&#xff0c;时间复杂度O(n2)&#xff0c;数据范围106显然超时 再细看下题目&#xff0c;我们重复进行了寻找是否出现过&#xff0c;干脆把每个元素出现过的次数k记录下来&#xff0c;直…

做抖音小店有何秘诀?2步提高流量和转化率,行业秘诀分享!

大家好&#xff0c;我是电商花花。 我们做抖音小店&#xff0c;最重要的就两点&#xff0c;一个是店铺的流量&#xff0c;一个是店铺的转化率。 店铺想要出单&#xff0c;赚钱&#xff0c;必然是离不开店铺的流量和转化率了&#xff0c;但是如何让流量变成销量这才是需要我们…

redis概述和安装

1 、redis概述和安装 1.1、安装redis 1. 下载redis2. 地址 : https://download.redis.io/releases/ 3. 选择需要的版本1.2 将 redis 安装包拷贝到 /opt/ 目录 1.3. 解压 tar -zvxf redis-6.2.1.tar.gz1.4. 安装gcc yum install gcc1.5. 进入目录 cd redis-6.2.11.6 编译 …

Linux第76步_“gpio子系统”下的LED驱动

使用新字符设备驱动的一般模板和“gpio子系统”&#xff0c;以及设备树&#xff0c;驱动LED。 1、添加“gpio_led”节点 打开虚拟机上“VSCode”&#xff0c;点击“文件”&#xff0c;点击“打开文件夹”&#xff0c;点击“zgq”&#xff0c;点击“linux”&#xff0c;点击“…

[零声教育] C++高性能日志课程总结

高性能日志 1 数据肯定是批量写入的 如果数据单笔写入会造成 磁盘寻址、频繁用户态/内核态的切换 &#xff08;耗时&#xff09; 2 fwrite/write 的区别 fwrite() 是C标准库中的函数&#xff0c;而 write() 是系统调用接口。fwrite底层也是通过write来实现的。 二者均都有缓冲…

重学SpringBoot3-ErrorMvcAutoConfiguration类

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 重学SpringBoot3-ErrorMvcAutoConfiguration类 ErrorMvcAutoConfiguration类的作用工作原理定制 ErrorMvcAutoConfiguration示例代码1. 添加自定义错误页面2.自定义错误控制器3. ErrorAttributes定制错误信息 结…

Java学习记录(十七)IO流(三)

转换流&#xff08;在字节流中想使用字符流的方法时使用&#xff09; 转换流是字节流和字符流之间的桥梁&#xff0c;转换流本身其实就是字符流所以可以使用字符流里的相关方法&#xff0c;通过InputStreamReader字符转换输入流能将字节流转化为字符流输入到内存中&#xff0c…

YOLOv8改进 | 注意力机制 | 添加YOLO-Face提出的SEAM注意力机制优化物体遮挡检测(附代码 + 修改教程)

一、本文介绍 本文给大家带来的改进机制是由YOLO-Face提出能够改善物体遮挡检测的注意力机制SEAM,SEAM(Spatially Enhanced Attention Module)注意力网络模块旨在补偿被遮挡面部的响应损失,通过增强未遮挡面部的响应来实现这一目标,其希望通过学习遮挡面和未遮挡面之间的…