2017-10-16 54 views
1

虽然这部作品在蒙戈:与geoQuery不同的值工作在蒙戈,但不是在春天

> 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(基本BSONEncoder.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.writeQuery(OutMessage.java:211)〜[mongo-java-driver-2.14.3.jar:na] at com.mongodb.OutMessage.query(OutMessage.java:86)〜[mongo -java-driver-2.14.3.jar:na]

回答

0

我无法使@Christoph Strobl代码甚至编译!

我终于用蒙戈-Java的应用程序,以获得不同的值:

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; 
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-1761(韧仍处于打开状态)寻求为distinct支持添加到MongoOperations