2017-10-16 4 views
1

で動作:個別の値、これはMongoので動作している間Mongoのではなく、春

> db.collection.distinct("key", {"position":{$geoWithin:{$box: [[-6.8, 36.7], [-0.5, 43.8]]}}}) 
> [ "A", "B" ] 

春エラー

Criteria criteria = Criteria.where("position").within(box); 
     Query query = new Query(); 
     query.addCriteria(criteria); 
List<String> result = mongoOperations.getCollection("collection") 
       .distinct("key", query.getQueryObject()); 

java.lang.IllegalArgumentExceptionがを返す:クラスをシリアル化することができませんorg.springframework.data.mongodb.core.query.GeoCommand at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:299)〜[mongo-java-driver-2.14.3.jar:na] at org.bson .BasicBSONEncoder.putObject(BasicBSONEncoder.java:194)〜[mongo-jav a-driver-2.14.3.jar:na] at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:255)〜[mongo-java-driver-2.14.3.jar:na] at org.bson。 BasicBSONEncoder.putObject(BasicBSONEncoder.java:194)〜[mongo-java-driver-2.14.3.jar:na] at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:255)〜[mongo-java-driver- 2.14.3.jar:na] at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:194)〜[mongo-java-driver-2.14.3.jar:na] at org.bson.BasicBSONEncoder.putObject( BasicBSONEncoder.java:136)〜[mongo-java-driver-2.14.3.jar:na] at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:36)〜[mongo-java-driver-2.14.3。 jar:na] at com.mongodb.OutMessage.putObject(OutMessage.java:289)〜[mongo-java-driver-2.14.3.jar:na] com.mongodb.OutMessage.write(OutMessage.java:86)〜[mongo-java-driver-2.14.3.jar:na] at com.mongodb.OutMessage.query(OutMessage.java:86)〜[mongo-java-driver-2.14.3.jar:na] -java-driver-2.14.3.jar:na]

答えて

0

@Christoph Stroblコードをコンパイルすることができませんでした!

MongoClient mongoClient = new MongoClient(); 
    MongoDatabase database = mongoClient.getDatabase(dbName); 
    MongoCollection<org.bson.Document> collection = database.getCollection(COLLECTION); 
    Bson query = Filters.geoWithinBox("position", 
      x1, y1, x2, y2); 

    DistinctIterable<String> resultList = collection.distinct("key", query, String.class); 

    Set resultSet = new HashSet(); 
    resultList.forEach(new Block<String>() { 
     @Override 
     public void apply(final String result) { 
      resultSet.add(result); 
     } 
    }); 

    return resultSet; 

は、私は最終的に個別の値を取得するにはMongo-javaのドライバを使用しました

0

コレクションの操作を使用して、MongoDB JavaドライバAPIを直接使用する必要があります。しかしQuery.getQueryObject()は、QueryMapperで変換されるので、下位のドライバで直接使用することはできません。 今のところ、あなた自身でマッピングを試みることができます。

QueryMapper mapper = new QueryMapper(mongoOperations.getConverter()); 
org.bson.Document mappedQuery = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); 

List<String> result = template.getCollection("collection") 
    .distinct("key", mappedQuery, String.class) 
    .into(new ArrayList<>()); 

DATAMONGO-1761MongoOperationsdistinctためのサポートを追加しようとしている(タフまだオープン)もあります。

関連する問題