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

时间:2017-07-06 12:26:09

标签: java spring mongodb spring-data

在我的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 个答案:

答案 0 :(得分:2)

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

将您的聚合替换为使用{/ 1}}和

first

OR

如果您需要使用Aggregation aggregation = Aggregation.newAggregation( Aggregation.group("exampleName") .first("exampleName").as("ex‌​ampleName") .first("e‌​xampleDateTime").as(‌​"exampleDateTime") .first("exampleDescription").as("exampleDescription") .count(‌​).as("exampleCount")

,请将pojo中的类型更改为String[]或字符串集合