社区
MongoDB
帖子详情
java mongodb 怎么查询内嵌数组中所有满足条件的文档?
sunkaigoon
2017-04-25 03:47:07
如图,我的文档里有一个集合basic_pic,我想查询出这个集合中所有basic_pic=1的文档(当然目前这里都是1)
...全文
2132
6
打赏
收藏
java mongodb 怎么查询内嵌数组中所有满足条件的文档?
如图,我的文档里有一个集合basic_pic,我想查询出这个集合中所有basic_pic=1的文档(当然目前这里都是1)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhmingcsdn
2019-03-29
打赏
举报
回复
/** * Aggregation agg = newAggregation( * unwind("rule"), // 将list 拆分查找 * match(criteria), // 匹配 * project("rule"), // 输出流(输出到下一个环节或输出) * skip(index), // index * limit(pageSize)); // 页数目 * AggregationResults<RuleScheme.RuleGroupFinderMap> results = mongoTemplate.aggregate(agg, "ruleScheme", * RuleScheme.RuleGroupFinderMap.class); * @param ruleId * @param groupName * @param status * @param type * @param pageNumber * @param pageSize * @return */ public Object findRuleGroupBy(String ruleId, String groupName, String status, String type, Integer pageNumber, Integer pageSize) { // 这里注意"_id" Criteria criteria = where("_id").is(ruleId); if (StringUtils.isNotBlank(groupName)) { criteria.and("rule.groupName").is(groupName); } if (StringUtils.isNotBlank(status)) { criteria.and("rule.status").is(status); } if (StringUtils.isNotBlank(type)) { criteria.and("rule.groupName").is(type); } // 分页 // RuleScheme.RuleGroupFinderMap 这个类的属性一个是id,一个是map(如下) // private String id; // private Map rule; if (ObjectUtils.allNotNull(pageNumber, pageSize)) { Aggregation aggNoPage = newAggregation( unwind("rule"), match(criteria), project("rule")); AggregationResults<RuleScheme.RuleGroupFinderMap> resultsNoPage = mongoTemplate.aggregate(aggNoPage, "ruleScheme", RuleScheme.RuleGroupFinderMap.class); long totalSize = resultsNoPage.getMappedResults().size(); long index = (pageNumber - 1) * pageSize; Aggregation agg = newAggregation( unwind("rule"), match(criteria), project("rule"), skip(index), limit(pageSize)); AggregationResults<RuleScheme.RuleGroupFinderMap> results = mongoTemplate.aggregate(agg, "ruleScheme", RuleScheme.RuleGroupFinderMap.class); List<RuleScheme.RuleGroupFinderMap> resultList = results.getMappedResults(); //page CustomPage<RuleScheme.RuleGroupFinderMap> customPage = new CustomPage<>(pageNumber, pageSize, totalSize); customPage.setRows(resultList); return customPage; } else { // 不分页 Aggregation aggNoPage = newAggregation( unwind("rule"), match(criteria), project("rule")); AggregationResults<RuleScheme.RuleGroupFinderMap> resultsNoPage = mongoTemplate.aggregate(aggNoPage, "ruleScheme", RuleScheme.RuleGroupFinderMap.class); List<RuleScheme.RuleGroupFinderMap> resultList = resultsNoPage.getMappedResults(); return resultList; } }
伤无赦
2018-09-06
打赏
举报
回复
unwind后再匹配一下
伤无赦
2018-09-06
打赏
举报
回复
unwind后再map
黑鹰猎手
2017-06-08
打赏
举报
回复
楼主这个问题有没有解决方案啊?我百度谷歌都找了,官方文档也看了,关于对子文档查询都是使用elemMatch,都只返回查到的第一个元素。遍历显然太不理想了,我被这个问题搞了一个月了。
sunkaigoon
2017-04-25
打赏
举报
回复
用elemMatch只能返回第一个匹配的
sunkaigoon
2017-04-25
打赏
举报
回复
难道只能查出来遍历过滤?
MongoDB
基本操作指南
MongoDB
是一个面向
文档
的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL。在使用
MongoDB
做产品原型的过程中,我们总结了MonogDB的一些亮点:使用JSON风格语法,易于掌握和理解:
MongoDB
使用JSON的变种BSON作为内部存储的格式和语法。针对
MongoDB
的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。Schema-less,支持嵌入子
文档
:
MongoDB
是一个Schema-free的
文档
数据库。一个数据库可以有多个Collection,每个Collection是Documents的集合。Collection和Document和传统数据库的Table和Row并不对等。无需事先定义Collection,随时可以创建。Collection中可以包含具有不同schema的
文档
记录。 这意味着,你上一条记录中的
文档
有3个属性,而下一条记录的
文档
可以有10个属性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列,甚至还可以是一个子
文档
(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高
查询
的速度。图1
MongoDB
是一个Schema-free的
文档
数据库图2是一个例子,作品和评论可以设计为一个collection,评论作为子
文档
内嵌
在art的comments属性中,评论的回复则作为comment子
文档
的子
文档
内嵌
于replies属性。按照这种设计模式,只需要按照作品id检索一次,即可获得所有相关的信息了。在
MongoDB
中,不强调一定对数据进行Normalize ,很多场合都建议De-normalize,开发人员可以扔掉传统关系数据库各种范式的限制,不需要把所有的实体都映射为一个Collection,只需定义最顶级的class。
MongoDB
的
文档
模型可以让我们很轻松就能将自己的Object映射到collection中实现存储。图2
MongoDB
支持嵌入子
文档
简单易用的
查询
方式:
MongoDB
中的
查询
让人很舒适,没有SQL难记的语法,直接使用JSON,相当的直观。对不同的开发语言,你可以使用它最基本的数组或散列格式进行
查询
。配合附加的operator,
MongoDB
支持范围
查询
,正则表达式
查询
,对子
文档
内属性的
查询
,可以取代原来大多数任务的SQL
查询
。CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给
MongoDB
的insert/update方法就可自动插入或更新;对于更新模式,
MongoDB
支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。
MongoDB
的update方法还支持Modifier,通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯。这些modifer可以让
MongoDB
具有和Redis、Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速。
mongodb
详细
文档
mongodb
详细
文档
MongoDB
常用的
查询
更新等操作汇总
我整理的一些
MongoDB
常用的
查询
以及更新等操作
Mongodb
入门教程、示例+Spring Boot完整示例+聚合.docx
Mongodb
入门教程、
Mongodb
示例、Spring Boot+
Mongodb
完整示例、Spring Boot+
Mongodb
完整示例聚合
MongoDB
知识点整理
MongoDB
知识点整理
MongoDB
1,798
社区成员
1,467
社区内容
发帖
与我相关
我的任务
MongoDB
MongoDB相关内容讨论区
复制链接
扫一扫
分享
社区描述
MongoDB相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章