2016-07-23 23 views
1

Wenn ich mit eingebettetem Mongo-Dokument arbeite, versuche ich, das Array abzuwickeln, aber ich bekomme Ausnahme wie org.springframework.data.mapping.model.MappingInstantiationException: Instantiate java.util fehlgeschlagen .Verwenden Sie den Konstruktor NO_CONSTRUCTOR mit Argumenten. Die Abfrage, was ich tue, ist geschrieben,Mongo db Java-Abwicklungsoperation in Aggregatabfrage, die Ausnahme ausbricht

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; 

Datensatz

{ 
"_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

Können Sie den Code schreiben, wo Sie Aggregationsmethode aufrufen? –

+0

@Andriy Simonov: Von einer anderen Klasse, die ich anrufe, Die Aggregatfunktion ist in einer Methode, ich werde diese Methode mit dynamischen Benutzerprofil-ID aufrufen. Aber hier habe ich die Benutzerprofil-ID als 800 fest programmiert. – Karthik

Antwort

1

Wenn das Ergebnis Ihrer Aggregation eine Liste von Logs Objekte wie dieses

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

dann Mächtigkeit der Empfänger ist falsch . Es muss nur ein Recipients im Gegensatz zu List sein, da das Empfängerfeld nach dem Abwickeln ein einzelnes Dokument enthält.

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

Aber wenn ich das mag, kann ich nur einen Empfänger richtig speichern? Ich möchte, dass ein Array von Empfängern für einen einzelnen Datensatz gespeichert wird. – Karthik

+1

Dann brauchen Sie zwei Klassen. Protokolliert übliche Vorgänge wie Speichern und Lesen und eine zusätzliche Klasse für das Aggregationsergebnis. Sie können es beispielsweise LogsAggregationResult nennen. –

+0

Wie kann ich eine andere Tabelle für Aggregationsergebnisse abfragen, die sich von der Tabelle unterscheidet, in der ich meine Datensätze gespeichert habe? Glaubst du, es wird funktionieren? – Karthik