java - 创建查询,如“A 是“b”,C 是“””(Spring Boot/Spring Data w/Mongo)
问题描述
我正在使用 MongoDB 和 Spring Data for MongoDB 使用 Spring Boot (2.3.4) 制作一个简单的应用程序。我通常使用 @Query 注释为应用程序创建查询,它工作得很好。但是对于我想使用的聚合,我使用 Criteria 类构建了一个查询。我需要的标准就像
where("primary").is(value).and("secondary").is("")
.
我需要所有主要等于“值”且次要为空的条目。在 MongoDB Compass 中输入的查询
{ $and: [ { primary: 'value' }, { secondary: ''} ] }
按预期工作,但是当我尝试将 Criteria 与 Spring 一起使用时,看起来与辅助部件的 and 部分已完全删除。我在primary中得到任何带有 'value' 的结果,在secondary中得到任何结果。这意味着空字段或其他任何内容。更换.is("")
零件.regex("^$")
没有帮助。
这对我来说看起来很基本,所以我在这里缺少什么?我不想用“空标志”替换空辅助,因为那感觉不对。
更新:
这是有问题的代码
Criteria crit;
if(!primary.equals(secondary)) {
crit = where("primary").is(primary.name()).and("secondary").is(secondary.name());
} else {
crit = where("primary").is(primary.name()).and("secondary").is("");
}
MatchOperation matchStage = Aggregation.match(crit);
GroupOperation groupStage = Aggregation.group("grouping").count().as("sum");
SortOperation sortStage = new SortOperation(Sort.by("_id"));
Aggregation aggregation = Aggregation.newAggregation(matchStage, groupStage, sortStage);
AggregationResults<TypePerGroup> results = mongoTemplate.aggregate(aggregation, "dataCollection", TypePerGroup.class);
解决方案
A 已使用 Mongo DBCompas 连接到 Atlas,并向集合添加了 4 条记录:
[{
"primary": "A",
"secondary": "A"
},{
"primary": "A",
"secondary": ""
},{
"primary": "B",
"secondary": "B"
},{
"primary": "B",
"secondary": ""
}]
两个查询:
List<Data> firstResults = mongoTemplate.query(Data.class)
.matching(Query.query(Criteria.where("primary").is("B").and("secondary").is("")))
.all();
System.out.println(firstResults);
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("primary").is("B"), Criteria.where("secondary").is(""));
List<Data> secondResults = mongoTemplate.query(Data.class)
.matching(Query.query(criteria))
.all();
System.out.println(secondResults);
给出了相同的结果:
[Data{primary='B', secondary=''}]
Campfire,您能否提供您的代码示例进行分析?
推荐阅读
- go - 在 Go 中创建循环 GraphQL 类型
- arrays - 谷歌表格:如何向下填充和防止在特定单元格编号参考中增加
- docusignapi - 在 DocuSign 模板中使用 mailto 协议创建超链接
- javascript - Firebase 交易预订系统
- python - 如何使用 matplotlib 在 Python 中绘制组合图?
- r - ggplot 轴乱码,看起来像 Unicode 框
- python - 在字典值列表中查找与另一个列表中的短语匹配的短语并返回找到的短语和相应的键
- java - load YAML in Java
- python - Question surrounding python and euclidean distance calculation
- java - implmentation of hashtable but there is a problem in coding i cant fix it