问题描述
在处理嵌入式mongo文档时,我试图展开数组,但遇到org.springframework.data.mapping.model.MappingInstantiationException之类的异常:无法使用带参数的构造函数NO_CONSTRUCTOR实例化java.util.List.我写的查询是
When working with embedded mongo document I am trying to unwind the array but I am getting exception like org.springframework.data.mapping.model.MappingInstantiationException: Failed to instantiate java.util.List using constructor NO_CONSTRUCTOR with arguments. The query what I wrote is,
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
}
]
}
推荐答案
如果聚合的结果是这样的Logs对象列表
If the result of your aggregation is a list of Logs objects like this
AggregationResults<Logs> results = mongoOps.aggregate(agg, "logs", Logs.class);
则收件人的基数不正确.它必须只是与列表相对的收件人,因为展开后的收件人字段仅包含一个文档.
then cardinality of recipients is incorrect. It must to be just a Recipients as opposed to List because after unwinding the recipients field holds a single document.
Logs.java
private String id;
private String userId;
private String conversationId;
private Date createdDate;
private Recipients recipients; <--
这篇关于Mongo DB Java展开操作在聚合查询中引发异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!