首页 文章

Spring Data Mongo返回列表而不是字符串

提问于
浏览
0

在我的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;
    }
}

1 回答

  • 2

    当您使用返回集合类型的 addToSet 时,spring调用 toString() 将其转换为字符串类型(请注意 [] 周围的引号),如pojo中所定义

    替换您的聚合以使用 first

    Aggregation aggregation = Aggregation.newAggregation( 
            Aggregation.group("exampleName")
               .first("exampleName").as("ex‌​ampleName")
               .first("e‌​xampleDateTime").as(‌​"exampleDateTime") 
               .first("exampleDescription").as("exampleDescription")
               .count(‌​).as("exampleCount")
    

    要么

    如果需要使用 addToSet ,请将pojo中的类型更改为 String[] 或字符串集合

相关问题