Query、BasicDBObject、BasicDBList查询mongodb不同使用方式

一、使用Query 和 Criteria 进行查询

方式1

/***根据patient_id获取MetadataHis中form_data.ZLFF=Immune的数据,返回结果按照exam_time升序排序*/private List<CdrData> findMedicationByPatienId(String patientId) {//设置mongo查询条件Query query = new Query();Criteria c =new Criteria();c.and("patient_id").is(patientId);c.and("sub_source").is("用药史");c.and("data").elemMatch(Criteria.where("key").is("ZID").and("value").is(groupIdVal));query.addCriteria(c);query.addCriteria(Criteria.where("data.key").is("Immune"));query.with(new Sort(Sort.Direction.ASC, "survey_time"));return mongoTemplate.find(query, CdrData.class);}

方式2

Query query = new Query(Criteria.where("updateTime").lte(LocalDateTime.now()).gte(LocalDateTime.now().minusMonths(5)));
Book book = mongoTemplate.findOne(query, Book.class);

二、使用BasicDBObject 进行查询

查询条件设置

BasicDBObject queryCond = new BasicDBObject();
  • 单个字段
queryCond.put("data_source", "诊断记录"); 

相当于

db.collect.find({"data_source":"诊断记录"})
  • in 的用法
queryCond.put("patient_id", new BasicDBObject("$in", patientIdList));
  • 数组字段中匹配多个符合条件的值
queryCond.put("data", new BasicDBObject("$elemMatch", new BasicDBObject("key", "EGFR").append("value", "+")));
BasicDBObject query = new BasicDBObject();
BasicDBObject basicDbObject = new BasicDBObject();
LocalDateTime startTime = LocalDateTime.now();
basicDbObject.append("$gte", startTime.minusMonths(5));
basicDbObject.append("$lte", startTime.plusHours(2));
query.put("updateTime", basicDbObject);
MongoCursor<Document> book = mongoTemplate.getCollection("book").find(query).iterator();
while (book.hasNext()) {Document doc = book.next();Object pidObj = doc.get("_id");System.out.println(pidObj);}
  • exists 用法 1 代表存在该字段,字段值为 null的也算
queryCond.put("time_point_id", new BasicDBObject("$exists", 1));
  • 指定返回字段 0代表不返回,1代表返回,_id会默认返回(不返回需手动设置为0)
 BasicDBObject filterCond = new BasicDBObject();filterCond.put("_id", 0);filterCond.put("patient_id", 1);filterCond.put("data", 1);
  • 设置字段排序 1表示升序,-1表示倒序
BasicDBObject sortCond = new BasicDBObject();
sortCond.put("survey_time", 1);

查询结果

MongoCursor<Document> cursor = mongoTemplate.getCollection("collection_name").find(queryCond).projection(filterCond).sort(sortCond).iterator();

遍历结果

while (cursor.hasNext()) {Document doc = cursor.next();Object pidObj = doc.get("patient_id");
}

三、 BasicDBList

BasicDBList可以存放多个BasicDBObject条件

例如:我们查询onumber=002OR cname=zcy1

BasicDBList basicDBList=new BasicDBList();
basicDBList.add(new BasicDBObject("onumber","002"));
basicDBList.add(new BasicDBObject("cname","zcy1"));
DBObjectobj =new BasicDBObject();
obj.put("$or", basicDBList);
Query query=new BasicQuery(obj);

相当于

db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]})

basicDBList.add方法是添加一个文档的查询条件

四、聚合查询,查出某一个字段出现次数前8的

  BasicDBObject queryCond = new BasicDBObject();queryCond.put("patient_id", new BasicDBObject("$in", patientTransferDepRepository.getPatientIdsByDep(depId)));Date startDate = null;Date endDate = null;if (month == null) {//统计当前年份 全部数据startDate = DateUtils.getYearFirst(year);endDate = DateUtils.getYearLast(year);} else {//统计当前 年-月 数据//手术时间在当年当月第一天和最后一天时间范围内(工具类month从0开始,此处month是从1开始,所以month-1)startDate = DateUtils.getFirstDayOfMonth(year, month-1);endDate = DateUtils.getLastDayOfMonth(year, month-1);}queryCond.put("survey_time", new BasicDBObject("$gte", DateUtils.parseDate(DateUtils.formatDate(startDate)+ " 00:00:00")).append("$lte", DateUtils.parseDate(DateUtils.formatDate(endDate)+ " 23:59:59")));aggregateCondList.add(new BasicDBObject("$match", queryCond));//unwindaggregateCondList.add(new BasicDBObject("$unwind", "$data"));// ZDLB 改为 手术名称的code(SSMC)aggregateCondList.add(new BasicDBObject("$match", new BasicDBObject("data.key", "SSMC")));//聚合条件 取出该年该月 手术名称:相应次数aggregateCondList.add(new BasicDBObject("$group", new BasicDBObject("_id", "$data.value").append("count" , new BasicDBObject("$sum", 1))));//排序,取手术名称对应次数前8的aggregateCondList.add(new BasicDBObject("$sort", new BasicDBObject("count", -1)));aggregateCondList.add(new BasicDBObject("$limit", 8));Map<String, Integer> resultMap = new LinkedHashMap<>(8);//遍历结果集MongoCursor<Document> cursor = mdcMongoTemplate.getCollection(CDR_DATA).aggregate(aggregateCondList).iterator();

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

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

相关文章

Servlet作业1

1.【单选题】 (10分) &#xff08;B &#xff09;是一个用 Java 编写的程序&#xff0c;是一种实现了Servlet接口的类&#xff0c;它是由web容器负责创建并调用&#xff0c;在服务器容器上运行&#xff0c;用于接收和响应用户的请求。 A.Filter B.Servlet C.Request D.Res…

解密.babyk:如何恢复并预防.babyk勒索病毒的入侵

导言&#xff1a; 在当前数字时代&#xff0c;勒索病毒如.babyk的出现成为网络安全的一大威胁。本文91数据恢复将介绍.babyk勒索病毒&#xff0c;以及如何有效恢复被其加密的数据文件&#xff0c;并提供一些预防措施。当面对被勒索病毒攻击导致的数据文件加密问题时&#xff0…

药敏分析分子对接

RCSB PDB: Homepage AutoDock Vina (scripps.edu) GSCA - Gene Set Cancer Analysis (hust.edu.cn) 药物筛选 gscalite数据库&#xff08;好像用不了了&#xff09; PRISM CTRP CMap GDSC oncoPredict文献学习-CSDN博客 蛋白的3D结构 RCSB PDB: Homepage SH3PXD2B G…

CRC(循环冗余校验)直接计算和查表法

文章目录 CRC概述CRC名词解释宽度 (WIDTH)多项式 &#xff08;POLY&#xff09;初始值 &#xff08;INIT&#xff09;结果异或值 &#xff08;XOROUT&#xff09;输入数据反转&#xff08;REFIN&#xff09;输出数据反转&#xff08;REFOUT&#xff09; CRC手算过程模二加减&am…

vue3中手写一个日历,年部分,月部分,周部分,日部分

效果图 高度自定义&#xff0c;支持每天的统计展示&#xff0c;弹窗展示&#xff0c;详情操作 月部分&#xff1a; 默认展示当前月&#xff0c;支持前进和后退选择下一月 支持自定义每月的展示数据&#xff0c; 周部分&#xff1a; 分为上下午&#xff0c;可以列出要做的事项…

30、pytest入门内容回顾

整体结构 解读与实操 pytest30讲主要从四个方面由浅入深的进行解读&#xff0c; 开始 讲解了pytest的概述&#xff0c;安装前的准备工作&#xff08;python,pycharm,pytest&#xff09;&#xff0c;运行方式&#xff08;命令行&#xff09;&#xff0c;断言&#xff08;assert…

麒麟linux将图片批量生成PDF的方法

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; wind…

OCP Java17 SE Developers 复习题08

答案 答案 答案 A. This code is correct. Line 8 creates a lambda expression that checks whether the age is less than 5, making option A correct. Since there is only one parameter and it does not specify a type, the parentheses around the parameter are …

【算法思考记录】力扣2477. 到达首都的最少油耗【C++,深度优先搜索】

原题链接 到达首都的最少油耗&#xff1a;一种优雅的解决方案 题目解析 这个算法题目描述了一个有趣的场景&#xff1a;一棵由城市和道路组成的树形结构&#xff0c;其中每个节点代表一个城市&#xff0c;边代表道路。所有城市的代表需要前往编号为0的城市——首都参加会议。…

【C++】POCO学习总结(九):网络

【C】郭老二博文之&#xff1a;C目录 1、Poco::Net::IPAddress IP地址 Poco::Net::IPAddress类存储IPv4或IPv6主机地址。 Poco::Net::IPAddress可以从字符串解析&#xff0c;也可以格式化为字符串。支持IPv4格式(d.d.d.d)和IPv6格式(x: x: x: x: x: x: x: x)。 常用函数&…

springboot整合阿里云oss上传图片,解决无法预览的问题

1.前置工作 需要申请一个域名,需要备案&#xff0c;对接这个踩了不少坑,写的很详细,guan fang tong guo bu 了,各位参考别的博客结合看吧,主要是域名配置,还有看service里面的实现 2.进入控制台 bucket列表 选择bucket 选择域名管理 复制你申请的域名,比如域名:abkhkajs…

1970-2022年中国省级国家级开发区数据集

1970-2022年Z国省级国家级开发区数据集 1、时间&#xff1a;1970-2022年 2、指标&#xff1a;单位名称、所属区域、所属省份、所属级别、开发区类型、关注热度、成立时间、核准面积、主导产业、地址、联系电话、经纬度 3、范围&#xff1a;2781个开发区 4、来源&#xff1a…

MagicPipe3D地下管网三维建模数据规格

经纬管网建模系统MagicPipe3D&#xff08;www.magic3d.net&#xff09;本地离线参数化构建三维地下管网&#xff08;含管道、接头、附属物等&#xff09;模型&#xff0c;输出标准3DTiles、Obj等格式&#xff0c;支持Cesium、Unreal、Unity等引擎可视化查询。MagicPipe3D三维建…

c++基本常见错误总结

我们无论是在学习中还是在工作当中&#xff0c;总是会遇到各种各样的c编译错误问题&#xff0c;经常会有一种情况就是上一次好像遇到过这种问题&#xff0c;但是就是想不起来了&#xff08;我就是这样&#xff09;所以下面这一篇文章就是总结自己遇到的编译以及运行错误。 注意…

【C语言】函数递归详解(二)

前言 在上一篇博客函数递归详解&#xff08;一&#xff09;中讲解了什么是递归&#xff0c;递归的思想及限制条件以及两个递归的例子&#xff0c;这一篇博客将讲解递归与迭代的关系。 递归与迭代 递归是一种很好的编程技巧&#xff0c;但是同很多技巧一样也是可能被误用的&…

如何将 Python 2 代码移植到 Python 3

目录 简要说明 详情 Python 2 的不同版本 确保你在你的 setup.py 文件中指定适当的版本支持 良好的测试覆盖率 了解 Python 2 和 Python 3 之间的区别 更新代码 除法 文本与二进制数据 使用特征检测而不是版本检测 防止兼容性退步 检查哪些依赖性会阻碍你的过渡 更…

ElasticSearch之Slow Log

ElasticSearch的慢日志&#xff0c;相关的参数及配置方法。 在log4j2.properties中配置慢日志的输出文件名。 Search Slow Log 相关参数 index.search.slowlog.threshold.query.warnindex.search.slowlog.threshold.query.infoindex.search.slowlog.threshold.query.debugin…

【算法集训】基础数据结构:一、顺序表(下)

由于今天的题目是昨天剩下的&#xff0c;所以只有两道题&#xff0c;也非常简单&#xff0c;刷完下班~~~嘿嘿 第六题 2656. K 个元素的最大和 https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/description/ 很简单的思路&#xff0c;要得到得分最大的&…

Centos7 制作Openssh9.5 RPM包

Centos7 制作Openssh9.5 RPM包 最近都在升级Openssh版本到9.3.在博客里也放了openssh 9.5的rpm包. 详见:https://blog.csdn.net/qq_29974229/article/details/133878576 但还是有小伙伴不停追问这个rpm包是怎么做的,怕下载别人的rpm包里被加了盐. 于是做了个关于怎么用官方的o…