2016-07-23 92 views
1

当使用嵌入式mongo文档我试图展开数组,但我收到异常像org.springframework.data.mapping.model.MappingInstantiationException:无法实例化java.util .List使用带参数的构造函数NO_CONSTRUCTOR。我就是写的查询,Mongo数据库java unwind操作聚合查询抛出异常

Aggregation agg = newAggregation(
     unwind("recipients"), 
match(Criteria.where("recipients.userId").is("800").andOperator(Criteria.where("recipients.status").is(false) 
       ))); 
    Logs.java 
private String id; 
private String userId; 
private String conversationId; 
private Date createdDate; 
private List<Recipients> recipients; 

Recipients.java 

private String userId; 
private boolean status; 

数据集

{ 
"_id" : ObjectId("579099e6000fda45000c0054"), 
"userId" : "800", 
"conversationId" : "57907e5f000fda45000c004b", 
"createdDate" : ISODate("2016-07-21T09:46:14.602Z"), 
"recipients" : [ 
     { 
       "userId" : "800", 
       "status" : false 
     }, 
     { 
       "userId" : "900", 
       "status" : false 
     } 
] 
    } 
{ 
"_id" : ObjectId("579099e9000fda45000c0055"), 
"userId" : "530a7998-ba3f-4366-8d21-bb1ca688cfdb", 
"conversationId" : "57907e5f000fda45000c004b", 
"createdDate" : ISODate("2016-07-21T09:46:17.915Z"), 
"recipients" : [ 
     { 
       "userId" : "800", 
       "status" : true 
     }, 
     { 
       "userId" : "900", 
       "status" : false 
     } 
] 
} 
{ 
"_id" : ObjectId("5790adda000fda2444d6ccdf"), 
"userId" : "530a7998-ba3f-4366-8d21-bb1ca688cfdb", 
"conversationId" : "578df6cf000fda2640b77c45", 
"createdDate" : ISODate("2016-07-21T11:11:22.522Z"), 
"recipients" : [ 
     { 
       "userId" : "800", 
       "status" : false 
     }, 
     { 
       "userId" : "530a7998-ba3f-4366-8d21-bb1ca688cfdb", 
       "status" : true 
     } 
] 
} 
{ 
"_id" : ObjectId("5790adde000fda2444d6cce0"), 
"userId" : "530a7998-ba3f-4366-8d21-bb1ca688cfdb", 
"conversationId" : "578df6cf000fda2640b77c45", 
"createdDate" : ISODate("2016-07-21T11:11:26.479Z"), 
"recipients" : [ 
     { 
       "userId" : "800", 
       "status" : false 
     }, 
     { 
       "userId" : "530a7998-ba3f-4366-8d21-bb1ca688cfdb", 
       "status" : true 
     } 
] 
} 
+0

你能写代码在哪里调用聚合方法吗? –

+0

@Andriy Simonov:我从另一个类中调用聚合函数,只有一种方法,我将使用动态用户配置文件Id调用该方法。但是,在这里我硬编码的用户配置文件ID为800. – Karthik

回答

1

如果聚合的结果是这样的

AggregationResults<Logs> results = mongoOps.aggregate(agg, "logs", Logs.class); 

日志对象的名单,然后接收方的基数是不正确。它必须只是收件人而不是列表,因为展开收件人字段后会保存单个文档。

Logs.java 
    private String id; 
    private String userId; 
    private String conversationId; 
    private Date createdDate; 
    private Recipients recipients; <-- 
+0

但是,如果我这样做,我可以只保存一个收件人吗?我想要一个收件人数组保存为单个记录。 – Karthik

+1

然后你需要两个类。记录通常的操作,如保存和读取,以及聚合结果的附加类。例如,您可以将其称为LogsAggregationResult。 –

+0

如何查询另一个表,以获得与我存储我的记录的表不同的聚合结果。你认为它会起作用吗? – Karthik