Я использую Java 8
, mongo-java-driver 3.10.2
и Jongo 1.3.0
.
И я пытаюсь использовать Jon go для выполнения запросов в MongoDB.
I написал небольшой java код, чтобы проверить, как использовать Jon go, см. ниже:
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import org.jongo.Aggregate.ResultsIterator;
import org.jongo.Jongo;
import org.jongo.MongoCollection;
public class JongoTeste {
public static void main(final String[] args) throws InterruptedException {
class MongoResult {
private String _id;
private int count;
}
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost");
MongoClient client = new MongoClient(connectionString);
DB database = client.getDB("mydb");
Jongo jongo = new Jongo(database);
MongoCollection collection = jongo.getCollection("user");
ResultsIterator<MongoResult> result = collection.aggregate("{'$match' : {'business_account_id' : { $oid : '5e3377bcb1dbae5124e4b6bf'}}}")
.and("{'$lookup' : {'localField' : 'profile_id','from' : 'profile','foreignField' : '_id','as' : 'profile'}}")
.and("{'$unwind' : {'path' : '$profile'}}")
.and("{'$match' : {'profile.type' : 'consultant'}}")
.and("{'$group' : {'_id' : '$business_account_id','count' : {'$sum' : 1}}}")
.as(MongoResult.class);
while (result.hasNext()) {
MongoResult r = result.next();
System.out.println("----");
}
}
}
Но я получаю сообщение об ошибке ниже в строке MongoResult r = result.next();
Exception in thread "main" org.jongo.marshall.MarshallingException: Unable to unmarshall result to class JongoTeste$1MongoResult from content {"_id": {"$oid": "5e3377bcb1dbae5124e4b6bf"}, "count": 1}
at org.jongo.marshall.jackson.JacksonEngine.unmarshall(JacksonEngine.java:50)
at org.jongo.ResultHandlerFactory$UnmarshallingResultHandler.map(ResultHandlerFactory.java:43)
at org.jongo.Aggregate$ResultsIterator.next(Aggregate.java:98)
at JongoTeste.main(JongoTeste.java:51)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize Class JongoTeste$1MongoResult (of type local/anonymous) as a Bean
at [Source: de.undercouch.bson4jackson.io.LittleEndianInputStream@5158b42f; pos: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:251)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:269)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:477)
at com.fasterxml.jackson.databind.ObjectReader._findRootDeserializer(ObjectReader.java:1813)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1570)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1234)
at org.jongo.marshall.jackson.JacksonEngine.unmarshall(JacksonEngine.java:47)
... 3 more
Caused by: java.lang.IllegalArgumentException: Can not deserialize Class JongoTeste$1MongoResult (of type local/anonymous) as a Bean
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isPotentialBeanType(BeanDeserializerFactory.java:810)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:139)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:406)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
... 10 more
Как мне заставить этот код работать?
Я читал другие вопросы о стековом потоке, но не смог выяснить проблему.