java.lang.ClassCastException: com.mongodb.client.internal.AggregateIterableImpl kann nicht in java.util.ArrayList umgewandelt werden
Ich habe unten Dokument. Ich muss mit dem requestParam-System Bob mit der folgenden Sammlung übereinstimmen und den Ergebniswert erhalten, wenn requestParam mit dem Email Systems.Bob.System übereinstimmt.
Hier ist RequestParam System
{
"_id" : ObjectId("5f0890e870e631865877e"),
"user" : "testuser",
"Email" : "[email protected]",
"Batch Systems" : [
"STAR",
"STORY",
"ITEMS",
],
"Email Systems" : [
{
"Bob" : {
"System" : "Bob",
**"result"** : true
}
},
{
"Wild" : {
"System" : "Wild",
"result" : true
}
},
{
"CRaft" : {
"System" : "Craft",
"result" : false
}
}
]
}
Ich habe mit der folgenden Syntax versucht, die java.lang.ClassCastException abzurufen: com.mongodb.client.internal.AggregateIterableImpl kann nicht in java.util.ArrayList umgewandelt werden. Kann mir jemand sagen, was mit dem folgenden Code nicht stimmt und mir bei der Synatx helfen.
MongoDatabase database = this.mongoClient.getDatabase(this.database);
MongoCollection<Document> user = database.getCollection(COLLECTION);
Document userQuery = new Document();
String searchString = new String(system);
AggregateIterable<Document> user1 =users.aggregate((List<? extends Bson>) new Document("$project", new Document("Email Systems", new Document("$match",
new Document("Email Systems.BobSystem",searchString)))));
Antworten
Das von users.aggregate () zurückgegebene Objekt ist eine AggregateIterable. ArrayList implementiert diese Schnittstelle nicht, sodass Ihre Umwandlung fehlschlägt. Versuchen Sie, es als AggregateIterable oder AggregateIterableImpl zu übertragen und damit zu arbeiten.
users.aggregate()Rückgabe eines AggregateIterableund nicht eines ArrayListdaher der Fehler. Sie können ein Iteratorvon erstellen AggregateIterableund dann Dokumente zu einem hinzufügen ArrayList.
MongoDatabase database = this.mongoClient.getDatabase(this.database);
MongoCollection<Document> user = database.getCollection(COLLECTION);
Document userQuery = new Document();
String searchString = new String(system);
AggregateIterable aggregateIterable = users.aggregate(Collections.singletonList(new Document("$project", new Document("Email Systems", new Document("$match", new Document("Email Systems.Bob.System", searchString))))));
// Create an iterator from the iterable
Iterator iterator = aggregateIterable.iterator();
ArrayList<Document> documents = new ArrayList();
// Then iterate over the iterator
while (iterator.hasNext()) {
documents.add((Document) iterator.next());
}
Eine detaillierte Antwort pro Treiberversion finden Sie unter MongoDB-Aggregation mit Java-Treiber