java.lang.ClassCastException: com.mongodb.client.internal.AggregateIterableImpl tidak dapat dilemparkan ke java.util.ArrayList
Saya punya dokumen di bawah ini. Saya perlu mencocokkan dengan requestParam System Bob dengan koleksi di bawah ini dan perlu mendapatkan nilai hasil jika requestParam cocok dengan Email Systems.Bob.System.
Di sini RequestParam adalah sistem
{
"_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
}
}
]
}
Saya telah mencoba dengan sintaks di bawah ini, mendapatkan java.lang.ClassCastException: com.mongodb.client.internal.AggregateIterableImpl tidak dapat dilemparkan ke java.util.ArrayList. Adakah yang bisa memberi tahu saya apa yang salah dengan kode di bawah ini dan bantu saya dengan 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)))));
Jawaban
Objek yang dikembalikan oleh users.aggregate () adalah AggregateIterable. ArrayList tidak mengimplementasikan antarmuka ini sehingga transmisi Anda gagal. Cobalah untuk melemparkan dan bekerja dengannya sebagai AggregateIterable atau AggregateIterableImpl.
users.aggregate()mengembalikan AggregateIterabledan bukan ArrayListkarena kesalahan. Anda dapat membuat Iteratordari AggregateIterabledan kemudian menambahkan dokumen ke file 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());
}
Lihat agregasi MongoDB dengan driver Java untuk jawaban rinci per versi driver