首页 > 其他分享 >Mongo 中字符类型数字求和

Mongo 中字符类型数字求和

时间:2023-08-05 10:44:08浏览次数:30  
标签:字符 Mongo 求和 fsize aggregation Aggregation num times size

在mongo中对字符类型数据求和时结果不是想要的,需要将字符类型数据转换为数字后再进行统计

集合中字段同时包含字符型数字和Number类型

mongo 聚合语句

[{
      "$project": {
        "size": 1,
        "fsize": {
          "$convert": {
            "input": "$size",
            "to": "long",
            "onError": 0,
            "onNull": 0
          }
        }
      }
    },
    {
      "$group": {
        "_id": null,
        "num": {
          "$sum": "$fsize"
        }
      }
    }]

java 代码

Aggregation aggregation = Aggregation.newAggregation(
	Aggregation.project("size").and(
		//这里将size类型转换为long类型,并指定转换失败或字段没有值时返回的值
		ConvertOperators.Convert.convertValueOf("size").to("long").onErrorReturn(0L).onNullReturn(0L)
	).as("fsize"), //别名
	Aggregation.group().sum("fsize").as("num"),
	Aggregation.addFields().addFieldWithValue("type", "7")
	.addField("fondsId").withValue("1")
	.addField("dataGroup").withValue("总和").build()
);
System.out.println(aggregation);
AggregationResults<StatisticLog> aggregate = mongoTemplate.aggregate(aggregation, "collectionName", Statistic.class);

对字符串类型中的数字部分求和

Aggregation aggregation = Aggregation.newAggregation(
                match(Criteria.where("field").is("fieldValue")),//条件筛选
                //根据日期进行统计,日期为字符串数据,需特殊处理,这里是根据月份进行分组统计,截取日期字符串0-7为月份
                Aggregation.project("date").andExpression(date).substring(0, 7).as("times")
                        //对该字段的数据转换为doubbo进行统计
                        .and(ConvertOperators.Convert.convertValueOf("size").to("int").onErrorReturn(0).onNullReturn(0)).as("num"),
                //根据处理后的时间进行分组,对处理后的要统计的字段数据进行求和
                Aggregation.group("times").sum("num").as("countSum"),
                //从新挑选展示字段
                Aggregation.project("times", "countSum").and("times").previousOperation());
        AggregationResults<Statistic> result = mongoTemplate.aggregate(aggregation, tableName, Statistic.class);
        List<Statistic> results = result.getMappedResults();

标签:字符,Mongo,求和,fsize,aggregation,Aggregation,num,times,size
From: https://www.cnblogs.com/dreamsrj/p/17607595.html

相关文章

  • Mongodb主从复制
    推荐步骤:在centos01上安装MongoDB数据库启动群集功能在centos02上安装MongoDB数据库启动群集功能在centos03上安装MongoDB数据库启动群集功能实验步骤:创建mongodb组和用户解压指定MongoDB安装位置配置优化命令创建mongodb数据库的配置文件修改主配置文件启动mongodb服务将安装完的m......
  • 使用 MongoDB 的兄弟,有没有采用 GridFS 做分布式文件系统的?
    修改写补充说明郭理靖,京东开放平台邓涛、Kenny、李波等人赞同压力以及数据量比较大的业务不推荐使用MongoGridFS。MongoGridFS在高并发(每秒写入10M,持续半小时到一个小时)的情况下secondary会无法catchupwithprimary。MongoGridFS不是为分......
  • 字符串总结
    title:字符串总结date:2023-07-1721:24:47tags:总结cover:https://gitcode.net/crimson000000/picture/-/raw/blog_pic/3d136f52381284a18738fa16c6f1b361.jpg这里放些字符串相关,总之也就是从头再学字符串了。基本概念border:一个字符串的真前缀,并且它和该字符串的一个......
  • mongo
    MongoDB教程什么是MongoDBMongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是......
  • 第一节 变量与字符串
                                                  第一节  变量与字符串   1.变量不用类型定义直接赋值x=3name="小甲鱼"age='5'x=y=32.print()括号里可以用单引号,双引号输出字......
  • 字符串回文,翻转
    @TOC前言从这篇文章开始进行算法的学习,开启新的篇章。一、字符串回文字符串回文:是指一个字符串从左到右读和从右到左读是一样的,即它的字符顺序颠倒后仍然保持不变。例如,"level"和"madam"就是回文字符串。在编程中,我们可以使用不同的算法来判断一个字符串是否是回文。方法一:将字......
  • Java获取字符串中首次出现非数字的位置
    /***获取字符串中首次出现非数字的位置*@paramvalue字符串内容*@return首次出现非数字的位置,若无非数字,则返回-1*/publicstaticintgetFirstNonDigitPosInString(Stringvalue){intfirstNonDigitPos=-1;if(TextUtils.i......
  • linux上使用yum部署mongodb4.2+分片副本
    来源:https://blog.51cto.com/wutengfei/5937039系统配置Linux是有文件句柄限制的,而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量。为防止服务因toomanyopenfiles错误出现宕机,这里需要对linux系统句柄数进行调整。##临时调整,系统重启即失效ulimit......
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类
    4、数据类型转换1)字符串转换成数值:int()-----------将值转换成整数float()-----------将值转换成小数str()-----------将值转换成字符串bool()-----------将值转换成布尔值例如:int()将值转换成整数s1="188"#字符串ns1=int(s1)#转换成整型数值print(ns1+8)#打印数......
  • 代码随想录算法训练营第九天| 复习字符串和双指针法(看卡哥文章复习)
     KMP算法就是在一个字符串中寻找另一个子串,避免了“跳回下一个字符再重新匹配”,实现了在一次字符串的遍历过程中就可以匹配出子串。28. 实现 strStr()  (本题可以跳过)     卡哥建议:因为KMP算法很难,大家别奢求 一次就把kmp全理解了,大家刚学KMP一定会有各种各样的......