Java 如何从AggregationOutput映射到POJO?
对于一个复杂的查询,我使用MongoDB Java API(我的大部分内容都使用Spring数据),并使用BasicDBObject编写了一个聚合语句Java 如何从AggregationOutput映射到POJO?,java,mongodb,aggregation-framework,mongodb-java,Java,Mongodb,Aggregation Framework,Mongodb Java,对于一个复杂的查询,我使用MongoDB Java API(我的大部分内容都使用Spring数据),并使用BasicDBObject编写了一个聚合语句 DBCollection users = mongoOperations.getCollection("users"); AggregationOutput aggregationOutput = users.aggregate( new BasicDBObject("$match", new BasicDBOb
DBCollection users = mongoOperations.getCollection("users");
AggregationOutput aggregationOutput = users.aggregate(
new BasicDBObject("$match", new BasicDBObject("_id", userId)),
new BasicDBObject("$project", new BasicDBObject("userProfile.vitals", 1)),
new BasicDBObject("$unwind", "$userProfile.vitals"),
new BasicDBObject("$match", new BasicDBObject("userProfile.vitals.type", type.name())),
new BasicDBObject("$sort", new BasicDBObject("userProfile.vitals.observationDate", -1)),
new BasicDBObject("$limit", 1)
);
此查询有效,我的问题与此语句无关
这个聚合的结果仍然非常适合我的POJO(聚合中没有$group)
如果我使用CriteriaAPI进行查询,我会得到一个用户对象。在AggregationOutput#results()中,我有一个DBObject
有没有一种方法可以调用内部用于将DBObject直接转换为我的POJO的转换器
我试过了
mongoTemplate.getConverter().read(User.class,result);
但这引发了一个异常,即它无法实例化java.util.List。这很有意义,因为这是一个接口
有什么想法吗
谢谢大家!
Kristof.我建议使用一个单独的类(AggregatedUser.class),您可以直接映射输出结果,而不是用户POJO映射 我这样做有几个原因:
- 建造它很容易
- 不要丢弃聚合输出中将来可能有用的元信息
- 一旦开始使用
,您将需要它$project