对于一个复杂的查询我下降到MongoDB Java API(使用Spring-data的大部分东西),我写了一个使用BasicDBObjects的聚合语句。如何从AggregationOutput映射到POJO?
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(我的聚合中没有$组)。
如果我会使用Criteria API查询,我会得到一个User对象。在AggregationOutput#results()我有一个DBObject。
有没有办法调用转换器,将内部用于将DBObject直接转换为我的POJO?
我试图
mongoTemplate.getConverter().read(User.class,result);
而是抛出一个异常,这是不能够实例化的java.util.List。这是有道理的,因为这是一个界面。
任何想法?
谢谢!
Kristof。