在我的Spring Boot应用程序中,我正在查询一组文档。我尝试执行聚合操作,将相似的字段组合在一起并计算它们。
问题在于,在返回正确的值时,它们应该只是正常的字符串" [\"测试名称\"]"应该是"测试名称"
我可以通过使用@Id注释解决其中一个字段的问题,但是Spring数据Mongo不喜欢复合键,因此我不能将其用作解决方案。
如何只返回字符串值,而不是下面给出的值。
{
"exampleDateTime": 1392029442389,
"exampleName": "[ \"Test Name\"]",
"exampleDescription": "[ \"Test Description\"]",
"exampleCount": 1
}
所以我有一个像这样的java对象
@Document(collection = "ExampleCollection")
public class Example{
private Date exampleDateTime;
private String exampleName;
private String exampleDescription;
private int exampleCount;
...getters and setters...
}
具有聚合的存储库实现
public class ExampleRepositoryImpl implements ExampleRepositoryCustom {
@Autowired
MongoTemplate mongoTemplate;
@Override
public List<Example> countExampleByName() {
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("exampleName").addToSet("exampleName").as("exampleName").addToSet("exampleDateTime").as("exampleDateTime")
.addToSet("exampleDescription").as("exampleDescription").count().as("exampleCount")
AggregationResults<Example> groupResults = mongoTemplate.aggregate(
aggregation,"ExampleCollection", Example.class);
List<Example> result = groupResults.getMappedResults();
return result;
}
}
答案 0 :(得分:2)
使用返回集合类型的addToSet
时,弹簧调用toString()
将其转换为字符串类型(注意[]
周围的引号),如pojo中所定义
将您的聚合替换为使用{/ 1}}和
first
OR
如果您需要使用Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("exampleName")
.first("exampleName").as("exampleName")
.first("exampleDateTime").as("exampleDateTime")
.first("exampleDescription").as("exampleDescription")
.count().as("exampleCount")
String[]
或字符串集合