java.lang.ClassCastException: com.mongodb.client.internal.AggregateIterableImpl ne peut pas être converti en java.util.ArrayList
J'ai ci-dessous le document. Je dois faire correspondre le requestParam System Bob avec la collection ci-dessous et obtenir la valeur de résultat si requestParam correspond à Email Systems.Bob.System.
Ici RequestParam est un système
{
"_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
}
}
]
}
J'ai essayé avec la syntaxe ci-dessous, en obtenant l'exception java.lang.ClassCastException: com.mongodb.client.internal.AggregateIterableImpl ne peut pas être converti en java.util.ArrayList. Quelqu'un peut-il me dire ce qui ne va pas avec le code ci-dessous et m'aider avec le synatx.
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)))));
Réponses
L'objet renvoyé par users.aggregate () est un AggregateIterable. ArrayList n'implémente pas cette interface, donc votre distribution échoue. Essayez de lancer et de travailler avec lui comme un AggregateIterable ou AggregateIterableImpl.
users.aggregate()retourne un AggregateIterableet pas un d' ArrayListoù l'erreur. Vous pouvez créer un fichier à Iteratorpartir de AggregateIterable, puis ajouter des documents à un fichier 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());
}
Voir l' agrégation MongoDB avec le pilote Java pour une réponse détaillée par version de pilote