spring-data-mongodb生成的Query语句order字段顺序错误

news2025/7/26 19:28:14

前言:

最近在实现一个需求的时候,需求要求查询的数据需要根据播放量倒叙、创建时间倒叙来排序,考虑到播放量、创建时间都有可能是相同的,就会出现排序不稳定的情况,于是就加入了"_id"作为第三个排序字段,在我进行DEBUG的时候,发现Query对象生成的查询语句居然把"_id"作为了第一个排序字段:

1、查询代码:

        Query query = new Query();
        List<Sort.Order> orders = new ArrayList<>();
        orders.add(Sort.Order.desc("aa"));
        orders.add(Sort.Order.desc("bb"));
        orders.add(Sort.Order.asc("_id"));
        query.with(Sort.by(orders));
        System.out.println(SerializationUtils.serializeToJsonSafely(query.getSortObject()));

2、控制台输出的内容:

{ "_id" : 1, "aa" : -1, "bb" : -1 }

3、Debug截图:

 从代码的逻辑上来说,正确的查询语句应该是:

Sort: { "aa" : -1, "bb" : -1,"_id" : 1, }

而我们看到的却是"_id"被提前了:

Sort: { "_id" : 1, "aa" : -1, "bb" : -1 }

原因分析:

1、跟踪代码,看看为什么会生成这样的内容:

1)、在DocumentCodec.beforeFields方法中,如果发现排序的字段中有"_id",则优先写入

2)、在DocumentCodec.skipField方法中,如果发现排序的字段中有"_id",则跳过写入

经过这样一波神操作,我们在使用SerializationUtils.serializeToJsonSafely(query.getSortObject())输出排序字段的JSON格式内容的时候,"_id"字段被调到第一位了。

对查询结果有没有影响?

当我们看到这个Query被生成成这样的时候,心头一紧,咋回事?难度spring-data-mongodb不能实现我的诉求吗?我们来看看最终发送到MongoDB集群里面的语句是什么样子的:

 从上图的DEBUG来看,发送到MongoDB里面的数据是正确的,并没有把“_id”排到第一,后面针对集合里面的数据进行验证,也发现没问题。

结论:

1、“_id”排序在执行的时候没有问题

2、“_id”排序在Query对象生成toString方法中写的有问题,应该是刻意为之,不知道是为什么

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

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

相关文章

Unity程序在VR一体机(Android)上卡死(闪退)后怎么办?——用adb查看android上某Unity app的debug信息

一、之前面临的困境 Unity的程序build到android一体机后&#xff0c;仿佛进入了一个黑箱子&#xff0c;你既看不到脚本的debug报错信息&#xff0c;也看不到任务管理器里的内存和CPU使用情况&#xff1f;如果黑屏、闪屏、花屏怎么办&#xff1f; 最近面临的一个问题就是&…

【快速上手系列】使用七牛云+webuploader实现对象云存储(OSS)

【快速上手系列】使用七牛云webuploader实现对象云存储&#xff08;OSS&#xff09; 步骤 一、七牛云配置 1、新建存储空间 进入七牛云&#xff0c;注册登录&#xff0c;进入控制台&#xff0c;选择对象存储 Kodo 选择空间管理——新建空间&#xff08;免费30天&#xff0…

[附源码]java毕业设计企业人力资源管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Bio】基础生物学 - 基因 gene

文章目录1. DNA 脱氧核糖核酸、RNA 核糖核酸1.1 核苷酸1.2 脱氧核糖核酸1.3 核糖核酸2. 基因2.1 基因组2.2 染色体2.3 基因与脱氧核苷酸的牵连2.4 基因与DNA的牵连2.5 基因与染色体的牵连Ref1. DNA 脱氧核糖核酸、RNA 核糖核酸 1.1 核苷酸 核苷酸 (Nucleotide)\blue{\text{核苷…

如何使用家庭网络运行Aleo Prover

目前ALEO三测第二阶段太卷了&#xff0c;虽然现阶段没有激-励&#xff0c;但是仍然有不少人卷进去&#xff0c;导致现在8核的云服务器一天才只能跑出三四个scores&#xff0c;可见大家的热情还是非常高的&#xff0c;但是这对于之前购买云服务器的用户来说&#xff0c;就比较难…

全网营销如何落地?全网营销的途径有哪些?

随着移动互联网的遍及&#xff0c;如今企业的经营发展越来越离不开全网营销。有些小伙伴可能对全网营销的具体操作方法有些不解&#xff0c;这里小马识途营销顾问系统解读下全网营销。 一、 什么是全网营销&#xff1f; 全网营销是全网整合营销的简称&#xff0c;即从产品规划、…

同花顺_代码解析_技术指标_D

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 DBCD DDI DMAFS DMI DMI_QL DPO DBCD 异同离差乖离率 公式描述&#xff1a; 先计算乖离率BIAS&#xff0c;然后计算不同日的乖离率之间的离差&#xff0c; 最后对离差进行指数移…

ArcGIS pro求点线最短距离Near

ArcGIS pro求点线最短距离Near 如果是ArcGIS经典版&#xff0c;可以从以下路径找到&#xff1a; ArcGIS pro就更简单了&#xff0c;在Analysis面板&#xff1a; 打开之后来介绍一下各参数意义&#xff1a; 按照ArcGIS帮助&#xff0c;该工具可求点、线、面之间的最短距离。 其…

React-Mobx(入门)

目录 1. Mobx介绍 优势 社区评价 ​编辑 2.配置开发环境 3.基础使用 1&#xff09;初始化mobx 2&#xff09;React使用store 4.计算属性&#xff08;衍生状态&#xff09; 5.异步数据处理 6. 模块化 1&#xff09;定义task模块 2&#xff09;定义counterStore 3&am…

配置错误的smb共享

介绍 Windows 是当今最流行的操作系统&#xff0c;不仅由个人用户使用&#xff0c;而且在大公司中也广泛使用。由于其操作简单性以及使用图形界面&#xff0c;如今&#xff0c;大量实体的公司网络充满了运行Windows操作系统的主机和服务器。无论这些机器针对的是最终用户、我们…

XSS-labs靶场实战(一)——第1-3关

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是XSS-labs靶场实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设备…

Linux安全--iptables详解

目录 1、iptables介绍 2、iptables四表五链详解 3、iptables基本语法 4、实际操作 4.1 增加规则 4.2 删除规则 4.3 修改规则 5、命令语法总结 6、基本匹配条件 7、iptables进阶用法 7.1 iprange扩展模块 7.2 string扩展模块 8、iptables进行端口转发 1、iptables介绍 …

【Python】面向Sqli-Labs Less15的布尔盲注二分法脚本

前言 其实写这个python脚本是为了完成我某节课的某个实验 代码里有一堆一堆的for循环&#xff0c;导致程序整个运行下来起码需要一个小时&#xff0c;而且还是基于二分法的qwq。本来想说去学一学python的多线程提升一下效率&#xff0c;但我发现我这代码一环扣一环&#xff0c…

基于PHP+MySQL的在线学习网站系统

随着我国教育体制的改革,我国大学生的数量越来越多。相对应的对我国的教育质量也提出了新的要求。如果仅仅是在课堂上学习那些有限的知识已经不能够再满足大学生对知识的渴望了。为了能够让大学生学习到更多的内容需要一个在线学习系统来辅助大学生进行学习。 PHP在线学习网站系…

点阵 LED 显示设计实验

一、实验目的&#xff1a; 1.了解LED点阵的基本结构。 2.学习LED点阵扫描显示程序的设计方法。 二、实验内容与要求&#xff1a; 编写程序&#xff0c;控制点阵向上卷动显示“原来如此是这样呀”。 实验系统中的1616 LED点阵由四块88LED点阵组成&#xff0c;如图1所示&…

[附源码]SSM计算机毕业设计作业自动评阅系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【多标签文本分类】《融合注意力与CorNet的多标签文本分类》

阅读摘要&#xff1a;   本文主要提出标签与文本注意力文本注意力、CorNet增强标签预测概率两个创新点&#xff0c;提升了实验精度。 参考文献&#xff1a;   [1] 融合注意力与CorNet的多标签文本分类 参考论文信息 论文名称&#xff1a;《融合注意力与CorNet的多标签文本分…

2.10 80%的小红书新手博主都会忽略的问题:排版【玩赚小红书】

其实&#xff0c;不管在哪一个平台发布作品&#xff0c;都需要注重排版。 因为舒服的排版&#xff0c;不仅能让读者视觉舒服&#xff0c;而且也是你重新检查作品逻辑是不是清晰的过程。 比如&#xff0c;你看下面这张对比图&#xff0c;从读者角度来看&#xff0c;你更喜欢排…

人类小脑内在组织背后的基因图谱

摘要 人类小脑的功能多样性在很大程度上被认为更多地来自于其广泛的联系&#xff0c;而不是局限于其部分不变的结构。然而&#xff0c;小脑内在组织中连接的确定是否以及如何与微尺度基因表达相互作用仍不清楚。在这里&#xff0c;我们通过研究同时连接小脑功能异质性及其驱动因…

【快速上手系列】使用idea调百度AI接口实现人脸识别功能

【快速上手系列】使用idea调百度AI接口实现人脸识别功能 一、人脸检测 步骤 1、百度AI开放平台 登录后点击控制台 点击公有云服务——应用列表——点击创建应用 填写一下信息然后创建 然后回到概览——领取免费资源&#xff08;如果账号没领取过的话&#xff09; 可以自选&…