2016-07-23 8 views
1

埋め込みmongoドキュメントで作業しているときに、配列を巻き戻そうとしていますが、org.springframework.data.mapping.model.MappingInstantiationException:java.util引数を持つコンストラクタNO_CONSTRUCTORを使用して.Listを作成します。私は、Mongo db Javaのアンワインド操作で集計クエリがスローされる例外

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; 

データは、お使いの集計の結果は、この

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

のようなログオブジェクトのリストである場合は、受信者のカーディナリティが誤っている

{ 
"_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:私が呼び出す別のクラスから、集約関数が1つのメソッドにあり、私はそのメソッドを動的ユーザープロファイルIDで呼び出します。しかし、ここで私は800というユーザプロファイルIDをハードコードしています。 – Karthik

答えて

1

を設定して書いたものをクエリ。受信者フィールドをアンワインドさせた後は単一のドキュメントが保持されるため、リストとは対照的に、受信者だけである必要があります。

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

しかし、私がこれを好きなら、1人の受信者しか保存できませんか?私は受信者の配列を単一のレコードのために保存したい。 – Karthik

+1

次に、2つのクラスが必要です。保存と読み取りのような通常の操作のログと、集計結果の追加クラス。たとえば、LogsAggregationResultと呼ぶことができます。 –

+0

レコードを格納したテーブルとは異なる集計結果に対して別のテーブルをクエリする方法を教えてください。それがうまくいくと思いますか? – Karthik

関連する問題