本文介绍了Mongo DB Java展开操作在聚合查询中引发异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在处理嵌入式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展开操作在聚合查询中引发异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-26 09:29