MongoDB数字字符串排序问题

问题描述

MongoDB中有一个集合t_test_sort结构如下,其中数值字段value为字符串类型,现想按照value的数值大小进行降序排列。

{"_id" : ObjectId("656c87b36ca8100cd4a60348"),"name" : "麻了","date" : "2033-04-05","value" : "-1.744353","_class" : "com.rkyao.spring.boot.mongo.entity.MongoSortEntity"
}

使用如下查询语句进行查询,得到的结果显然不对,这样是按照字符串进行排的,而不是数值大小

db.getCollection("t_test_sort").find({}).sort({ "value": -1 })

请添加图片描述

尝试解决

网上搜索了一波解决方案都是要添加numericOrdering:true 配置,这样可以将字符串按照数值排序,但是试验后依然不行。

db.getCollection("t_test_sort").find({}).sort({ "value": -1 }).collation({"locale": "zh",numericOrdering:true})

请添加图片描述
百思不得其姐,查询MongoDB官方文档后找到了原因,原来是numericOrdering:true只支持非负整数,负数和小数都不支持
请添加图片描述
网上的方案行不通,只能继续研究了。

解决方案
方案一

value字段的类型修改为数值型,但是修改字段的影响比较大,需要重新刷数据且有可能会影响其他业务,所以除非走投无路暂不考虑。

方案二

再次查询官方文档后找到了一个方法,可以在聚合管道中使用$toDecimal value字段的值转换为数值,赋给一个临时字段sortField,然后在根据sortField字段进行排序。

db.getCollection("t_test_sort").aggregate([{$addFields: {sortField: { $toDecimal: "$value" }}},{$sort: { sortField: -1 }}
])

请添加图片描述
可以看到查询结果完全按照sortField数值大小降序排列,问题解决。

Java代码也一并给出来

public List<MongoSortEntity> sort() {List<AggregationOperation> operationList = new ArrayList<>();operationList.add(Aggregation.project("_id", "name", "date", "value").and(ConvertOperators.ToDecimal.toDecimal("$value")).as("sortField"));operationList.add(Aggregation.sort(Sort.by(Sort.Direction.DESC, "sortField")));Aggregation aggregation = Aggregation.newAggregation(operationList);AggregationResults<MongoSortEntity> results = mongoTemplate.aggregate(aggregation, 't_test_sort', MongoSortEntity.class);return results.getMappedResults();}
参考文档

numericOrdering用法

https://www.mongodb.com/docs/manual/reference/collation/#std-label-numeric-order-restrictions

$toDecimal 用法

https://www.mongodb.com/docs/manual/reference/operator/aggregation/toDecimal/

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

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

相关文章

《Spring Cloud学习笔记:Nacos配置管理 OpenFeign LoadBalancer Getway》

基于Feign的声明式远程调用&#xff08;代码更优雅&#xff09;&#xff0c;用它来去代替我们之前的RestTemplate方式的远程调用 1. Nacos配置管理&#xff1a;Nacos Config 服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题&#xff1a; 配置文件相…

OpenGL :LearnOpenGL笔记

glfw https://github.com/JoeyDeVries/LearnOpenGL/blob/master/src/1.getting_started/1.1.hello_window/hello_window.cpp #include <glad/glad.h>// 注: GLAD的include文件包含所需的OpenGL头文件(如GL/GL.h) &#xff0c;因此确保在其他需要OpenGL的头文件 (如GLFW…

安装向日葵并设置开机自启动

Ubuntu/Deepin系统&#xff1a; 下载向日葵远程安装包 向日葵远程控制app官方下载 - 贝锐向日葵官网向日葵远程控制app官方下载 - 贝锐向日葵官网 图形版安装 图形版下载到本地&#xff0c;然后上传到服务器/home/narada目录下 apt install SunloginClient_11.0.1.44968_am…

添加调试日志,bug消失

参考&#xff1a;就删了个printf&#xff0c;代码崩了&#xff01; 1、运行报错代码 #include "stdio.h" #include "stdlib.h" #include "string.h"void func1() {int arr[10];memset(arr, 1, sizeof(arr)); }void func2() {int index;int* ar…

【PTA】L1-32 Left-pad (C++)

题目链接&#xff1a;L1-032 Left-pad 题目要求&#xff1a; 根据新浪微博上的消息&#xff0c;有一位开发者不满NPM&#xff08;Node Package Manager&#xff09;的做法&#xff0c;收回了自己的开源代码&#xff0c;其中包括一个叫left-pad的模块&#xff0c;就是这个模块…

亚马逊,速卖通,lazada卖家如何快速提升新品星级与评论数量

补单测评在所有的跨境电商中扮演着重要的角色&#xff0c;商家们了解到补单可以快速增加产品的销量、评论数量&#xff0c;提升排名&#xff0c;从而打造爆款产品。产品的购买率和评价对于转化率和平台排名至关重要&#xff01;当排名不断提高&#xff0c;带来的流量也会增加&a…

Java框架基础--maven,http,postman

maven Maven 提供了一个标准的构建生命周期和一组约定的目录结构&#xff0c;以简化和规范项目的构建过程。它主要用于 Java 项目&#xff0c;但也可以用于其他类型的项目。提高了项目的可维护性、可重复性和一致性&#xff0c;简化了构建和依赖管理的复杂性&#xff0c;使得开…

Java guava partition方法拆分集合自定义集合拆分方法

日常开发中&#xff0c;经常遇到拆分集合处理的场景&#xff0c;现在记录2中拆分集合的方法。 1. 使用Guava包提供的集合操作工具栏 Lists.partition()方法拆分 首先&#xff0c;引入maven依赖 <dependency><groupId>com.google.guava</groupId><artifa…

抚琴成一快-琶音

琶音 0.导读1.定义2.作用3.注意事项4.练习方法1.前置知识2.和弦指型图1.大三和弦琶音指型2.小三和弦琶音指型3.大七和弦琶音指型4.小七和弦琶音指型5.属七和弦琶音指型 3.演奏方法1.拨弦方式2.节奏3.其他 99.参考 0.导读 在吉他学习的过程中&#xff0c;大家或多或少都会听到过…

模型树实操

很多时候&#xff0c;数据都是有层级和分类的&#xff0c;使用laravel的Dcat框架&#xff0c;可以快速搭建一个结构清晰、且可以鼠标拖拽排序的后台&#xff1b;先上例子更直观&#xff1a; 这里是Dcat的模型树使用文档&#xff0c;戳一下&#xff1b; 重点注意事项有&#x…

渗透测试(Lab4.2)

配置WebDeveloper的时候遇到一个错误 导入失败&#xff0c;因为 E:…ovf 未通过 OVF 规范一致性或虚拟硬件合规性检查。 请单击“重试”放松 OVF 规范与虚拟硬件合规性检查&#xff0c;并重新尝试导入&#xff1b; 或单击“取消”以取消导入。如果重新尝试导入&#xff0c;可能…

报修系统的流程是怎么样的?有什么好用的售后工单管理系统推荐?

很多制造业公司为了做好售后报修服务&#xff0c;会特意建立一个售后报修系统。我以前有一个做家电的客户&#xff0c;他们公司就是用一个工单系统来处理消费者报修的问题&#xff0c;效果挺不错的。消费者买到的产品有问题的话&#xff0c;直接用微信扫描说明书上面的小程序码…

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…

mac使用idea插件 java decomplier反编译jar包

安装插件 这样在本地idea的插件目录下就有 命令 #创建文件夹&#xff0c;用以存放反编译结果jar包 mkdir test#开始反编译文件 java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompil…

【深度学习-目标检测】05 - YOLOv1 论文学习与总结

论文地址&#xff1a;You Only Look Once:Unified, Real-Time Object Detection 论文学习 1. 摘要 YOLO的提出&#xff1a;作者提出了YOLO&#xff0c;这是一种新的目标检测方法。与传统的目标检测方法不同&#xff0c;YOLO将目标检测视为一个回归问题&#xff0c;直接从图像…

Django 访问前端页面一直在转异常:ReferenceError:axios is not defined

访问&#xff1a;http://127.0.0.1:8080/ my.html 一、异常&#xff1a; 二、原因 提示&#xff1a;axios找不到&#xff01;&#xff01; 查看代码<script src"https://unpkg.com/axios/dist/axios.min.js"></script>无法访问到官网 三、解决 Using j…

HTML转Word后打开默认为WEB板式改为页面视图

在html 标签后面添加 <html xmlns:vurn:schemas-microsoft-com:vmlxmlns:ourn:schemas-microsoft-com:office:officexmlns:wurn:schemas-microsoft-com:office:wordxmlns:mhttp://schemas.microsoft.com/office/2004/12/ommlxmlnshttp://www.w3.org/TR/REC-html40> 在…

模型量化之AWQ和GPTQ

什么是模型量化 模型量化&#xff08;Model Quantization&#xff09;是一种通过减少模型参数表示的位数来降低模型计算和存储开销的技术。一般来说&#xff0c;模型参数在深度学习模型中以浮点数&#xff08;例如32位浮点数&#xff09;的形式存储&#xff0c;而模型量化可以…

【R语言爬虫】使用rvest包爬取豆瓣读书Top 250,仅需50行代码(速度挺快)

【R语言爬虫】使用rvest包爬取豆瓣读书Top 250&#xff0c;仅需50行代码&#xff08;速度挺快&#xff09; 爬取目标 书名&#xff0c;作者&#xff0c;出版社&#xff0c;时间&#xff0c;价格 https://book.douban.com/top250?start0 发现需要爬取的内容就在<div cla…

Xshell连接不上本地虚拟机中的linux处理

0、连接不上虚拟机的原因 1、本地电脑未启用VMware网络。 2、连接协议选择错误。 3、防火墙屏蔽IP。 4、虚拟机网络连接模式不是桥接模式。 1、查看本地是否启用VMware的网络 2、连接协议选择 我们在新建会话时&#xff0c;可选的协议有FTP和SFTP两种&#xff0c;其中FTP采用21…