gpt4 book ai didi

java - 创建 Query like "A is "b"and C is '' "(Spring Boot/Spring Data w/Mongo)

转载 作者:行者123 更新时间:2023-12-03 11:20:13 25 4
gpt4 key购买 nike

我正在使用带有 Spring Data for MongoDB 的 MongoDB 使用 Spring Boot (2.3.4) 制作一个简单的应用程序。我通常使用 @Query 注释为应用程序创建查询,它工作得很好。但是对于我想使用的聚合,我使用 Criteria 类构建了一个查询。我需要的标准是where("primary").is(value).and("secondary").is("") .
我需要主要等于“值”且次要为空的所有条目。在 MongoDB Compass 中输入的查询{ $and: [ { primary: 'value' }, { secondary: ''} ] }按预期工作,但是当我尝试在 Spring 中使用 Criteria 时,看起来与次要的部分已完全删除。我在主要和次要中得到任何具有“值(value)”的结果。这意味着空字段或其他任何内容。更换 .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);

最佳答案

这适用于 mongodb - 不确定抽象指南针添加了什么。两个查询不会生成相同的 json 查询,但它们是相等的。
生成的查询

where("primary").is(value).and("secondary").is(""). 
{"primary":value, "secondary": ""}
也许指南针不喜欢这个变体?
无论如何要生成类似于您在指南针中输入的内容的查询,您可以使用以下代码
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("primary").is("hello"), Criteria.where("secondary").is(""));
Query query = Query.query(criteria);

关于java - 创建 Query like "A is "b"and C is '' "(Spring Boot/Spring Data w/Mongo),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65092025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com