java mongodb 怎么查询内嵌数组中所有满足条件的文档?

sunkaigoon 2017-04-25 03:47:07
如图,我的文档里有一个集合basic_pic,我想查询出这个集合中所有basic_pic=1的文档(当然目前这里都是1)
...全文
2132 6 打赏 收藏 转发到动态 举报
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是一个面向文档的数据库,目前由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更加简单快速。

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧