mongo分组查询问题以及mongo根据Date类型查询

一、mongo分组查询

mongo中如果只是根据条件查询数据,则只需要:

db.getCollection('表名').find({'source':{$eq:'5'}})

如果根据字段进行分组查询,那么需要用aggregate传一个数组进行查询,如

db.getCollection('表名').find({ "$and" : [{ "startTime" : { "$gt" : new Date(1702296000837) } }, { "startTime" : { "$lt" : new Date(1702382400838) } }, { "source" : { "$eq" : "5" } }] })

在Java代码中怎么实现分组查询呢?

我们需要使用BasicDBObject构建四个对象,分别是match(查询条件)、project(展示字段)、group(分组信息获取)、sort(根据什么字段排序)才能实现分组查询

1、查询条件构造 match

{ "$match" : { "$and" : [{ "startTime" : { "$gte" : { "$date" : 1676721600504 } } }, { "startTime" : { "$lte" : { "$date" : 1702641600504 } } }] } }

代码实现:

BasicDBObject st = new BasicDBObject("$gte", new Date());
BasicDBObject et = new BasicDBObject("$lte", new Date());
BasicDBObject startTime = new BasicDBObject("createDate",st);
BasicDBObject endTime = new BasicDBObject("createDate",et);  //相当于 createDate<=时间1 and createDate >= 时间2

BasicDBList list = new BasicDBList();
list.add(startTime);
list.add(endTime); //如果有其他的条件再继续添加

2、构建分组,以及分组的内容

{ "$group" : { "_id" : "$agentId", "list" : { "$push" : { "sId" : "$sId", "title" : "$title", "status" : "$status"} } } }

这相当于用agentId字段进行分组,然后在list字段插入分组的每一条明细信息,如果要把整条明细字段都保留,插入到list集合中,那需要将红色字段修改从$$ROOT (需要mongo版本支持)

代码实现:

BasicDBObject group= new BasicDBObject();
groupFields.put("_id", "$ccodAgentId");
BasicDBObject show = new BasicDBObject();
show.put("custId","$custId");
show.put("status","$status");
group.put("list", new BasicDBObject("$push", show));

3、构建查询筛选展示字段 project

BasicDBObject project= new BasicDBObject("_id", 1);
project.put("list", 1);

注意 这相当于从mongo表中查询筛选,最后保留下来哪些字段,这里最后展示的是_id、list两列

(要注意project在aggregate数组中的位置,如果这里project放在group的前面,那么就查不出其他字段了)

代码实现:

BasicDBObject project= new BasicDBObject("_id", 1);
project.put("list", 1);

4、构建排序

{ "$sort" : { "_id" : 1 } }

根据_id字段进行排序,1是正序,-1是反序

代码实现:

BasicDBObject sortBy = new BasicDBObject();

sortBy.put("startTime", 1);

最后查询:

List<DBObject> pipeline = new ArrayList<DBObject>();
pipeline.add(match);

pipeline.add(group);
pipeline.add(fields);
pipeline.add(sort);

//指定聚合的输出格式为CURSOR

AggregationOptions build = AggregationOptions.builder().outputMode(AggregationOptions.OutputMode.CURSOR).build();

Iterator<DBObject> it = mongoTemplate.getCollection(collectionName).aggregate(pipeline,build);

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

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

相关文章

[每周一更]-(第27期):HTTP压测工具之wrk

[补充完善往期内容] wrk是一款简单的HTTP压测工具,托管在Github上,https://github.com/wg/wrkwrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事…

Android APP 常见概念与 adb 命令

adb 的概念 adb 即 Android Debug Bridge 。在窗口输入 adb 即可显示帮助文档。adb 实际上就是在后台开启一个 server&#xff0c;会接收 adb 的命令然后帮助管理&#xff0c;控制&#xff0c;查看设备的状态、信息等&#xff0c;是开发、测试 Android 相关程序的最常用手段。…

Centos系统pnpm升级报错 ERR_PNPM_NO_GLOBAL_BIN_DIR

在 CentOS 系统中使用 pnpm i -g pnpm 报错&#xff1a;ERR_PNPM_NO_GLOBAL_BIN_DIR Unable to find the global bin directory&#xff0c;折腾半天终于解决了。 完整报错信息 [rootVM-8 test]# pnpm i -g pnpm Nothing to stop. No server is running for the store at /roo…

linux20day 排序sort 字符处理cut cpu使用占比排序 awk文本数据处理

目录 1、排序sort参数用法排序&#xff08;-n&#xff09;从大到小 倒叙&#xff08;-r&#xff09; cpu使用占比排序&#xff08;ps aux --sort -%cpu&#xff09; 2、截取到某个字符串 cut3、awk处理文本文件用法&#xff1a;打印等于 和不等于 1、排序sort 经常用于排序 参…

Spring 的 @Configuration 和 @Component 注解区别

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

数据分析的基本步骤

了解过数据分析的概念之后&#xff0c;我们再来说下数据分析的常规步骤。 明确目标 首先我们要确定一个目标&#xff0c;即我们要从数据中得到什么。比如我们要看某个指标A随时间的变化趋势&#xff0c;以期进行简单的预测。 数据收集 当确定了目标之后&#xff0c;就有了取…

js逆向-JS加密破解进阶

目录 一、JS逆向进阶一&#xff1a;破解AES加密 &#xff08;一&#xff09;AES对称加密算法原理 &#xff08;二&#xff09;破解AES加密 &#xff08;三&#xff09;实战&#xff1a;发现报告网 二、JS逆向进阶二&#xff1a;破解RSA加密 &#xff08;一&#xff09;RS…

gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架

背景介绍 gRPC 是一种现代开源高性能远程过程调用 &#xff08;RPC&#xff09; 可以在任何环境中运行的框架。它可以有效地连接服务 在数据中心内和数据中心之间&#xff0c;具有对负载平衡、跟踪、 运行状况检查和身份验证。它也适用于最后一英里 分布式计算&#xff0c;用于…

P20类神经网络训练不起来怎么办?- 批次和动量

什么是batchsmall batch 和 large batch 的比较 &#xff1a; large batch 更快&#xff0c;small batch 在训练集和测试集上效果效果更好动量的意义和作用&#xff1a; 类似于物理上多了一点惯性&#xff0c;防止困在鞍点。 动量是之前所有梯度的加权和。 1. batch 是什么 …

高压电气是什么

高压电气 电工电气百科 文章目录 高压电气前言一、高压电气是什么二、高压电气的类别三、高压电气的作用原理总结前言 高压电气在电力系统中起着重要的作用,它能够将电能有效地输送和分配到各个用户,为社会和工业生产提供稳定可靠的电力供应。然而,高压电气系统也需要注意安…

Python【Matplotlib】鼠标单击事件判断点击的是否为图例

直接上代码&#xff1a; import matplotlib.pyplot as plt# 创建一个简单的图表 fig, ax plt.subplots() line, ax.plot([1, 2, 3], labelLine 1) ax.legend(draggableTrue)# 获取图例对象 legend ax.get_legend()# 获取图例的边界框 legend_bbox legend.get_window_exten…

Mr_HJ / form-generator项目文档学习与记录(续)

以后主打超融开源社区 (jiangzhicheng88) - Gitee.com render.js就是对vue的render函数的自己简单定制封装。 render.js实现的功能是将json表单中的__config__.tag解析为具体的vue组件&#xff1b; 正常开发流程我们组件输入的时候会触发组件内的 this.$emit(getValue, val)…

PyQt6 安装Qt Designer

前言&#xff1a;在Python自带的环境下&#xff0c;安装Qt Designer&#xff0c;并在PyCharm中配置designer工具。 在项目开发中&#xff0c;使用Python虚拟环境安装PyQt6-tools时&#xff0c;designer.exe会安装在虚拟环境的目录中&#xff1a;.venv\Lib\site-packages\qt6_a…

【PHP】openssl_encrypt、openssl_decrypt对称加密解密

目录 1.加密解密封装类 2.调用方法 3.打印结果 1.加密解密封装类 <?php namespace app\common\library;/*** AES加解密* Class Client* package common\components\wsd*/ class Aes {const KEY "xxxxxxxxxxxx";const CIPHER "AES-128-CBC";/*** 加…

新时代商业市场:AR技术的挑战与机遇并存

随着科技的不断发展&#xff0c;增强现实&#xff08;AR&#xff09;技术逐渐成为当今社会的一个重要组成部分。AR技术能够将虚拟世界与现实世界相结合&#xff0c;为人们提供更加丰富、多样化的体验。在新时代的社会商业市场中&#xff0c;AR技术也正逐渐被应用于各种商业活动…

Future设计模式

Future设计模式&#xff0c;针对长时间执行任务场景&#xff0c;提供了一种凭据式解决方案。Future提供了获取计算结果和判断是否完成的两个方法&#xff0c;其中获取计算结果将会导致调用阻塞&#xff08;在任务未完成的情况下&#xff09;。 示例代码如下&#xff1a; publi…

NPM开发工具的简介和使用方法及代码示例

NPM&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;用于管理和共享被发布到模块仓库的JavaScript代码。本文将介绍NPM的定义、使用方法、代码示例以及总结。 一、NPM的定义 NPM是Node.js的默认包管理工具&#xff0c;它的功能包括安装、管理、…

HTTP超文本传输协议

HTTP协议 概述名词媒体类型URL语法HTTP报文组成HTTP报文语法HTTP请求方法HTTP状态码 概述 HTTP&#xff08;Hypertext transfer protocol&#xff09;超文本传输协议是Web浏览器&#xff0c;服务器和相关的web应用程序相互通信的基石。HTTP使用的是可靠数据传输协议确保数据在…

机器学习算法---回归

1. 线性回归&#xff08;Linear Regression&#xff09; 原理&#xff1a; 通过拟合一个线性方程来预测连续响应变量。线性回归假设特征和响应变量之间存在线性关系&#xff0c;并通过最小化误差的平方和来优化模型。优点&#xff1a; 简单、直观&#xff0c;易于理解和实现。…

C#学习相关系列之数据类型类的定义(一)

一、类的定义 C#中类是一种引用类型&#xff0c;用于表示具有状态和行为的对象。类可以包含字段、属性、方法、事件等成员。 public class MyClass { // 类的成员定义 } 常用的关键字如下&#xff1a; 1、public 是一个访问修饰符&#xff0c;用于指定类成员的访问级…