2015-12-02 53 views
3

我正在尝试使用MongoDB的com.mongodb.client.model.geojson.Polygon类和com.mongodb.client.model.geojson.Position类进行地理空间查询。客户端代码在其自己的boundingBox对象中填充四个双角。为什么我会收到以下错误:无法找到类com.mongodb.client.model.geojson.Polygon的编解码器

这里是代码片段:

Polygon polygon = new Polygon(Arrays.asList(new Position(boundingBox.getRightLongitude(),boundingBox.getTopLatitude()), 
       new Position(boundingBox.getLeftLongitude(), boundingBox.getTopLatitude()), 
       new Position(boundingBox.getLeftLongitude(), boundingBox.getBottomLatitude()), 
       new Position(boundingBox.getRightLongitude(), boundingBox.getBottomLatitude()), 
       new Position(boundingBox.getRightLongitude(), boundingBox.getTopLatitude()))); 
     //Document filter = new Document("coordinates",geoWithin("coordinates", polygon)); 


    Block<Document> printBlock = new Block<Document>() { 
     @Override 
     public void apply(final Document document) { 
      System.out.println(document.toJson()); 
     } 
    }; 
    database.getCollection("roads").find(geoWithin("coordinates",polygon)).forEach(printBlock); 

这里是错误:

Exception in thread "main" org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.mongodb.client.model.geojson.Polygon. 

回答

0

在设置时,需要指定编解码器的注册表,你使用com.mongodb.MongoClient.getDefaultCodecRegistry()目前缺少GeoJsonCodecProvider()应做得很好

对于异步驱动程序

MongoClientSettings settings = MongoClientSettings.builder().readPreference(readPreference) 
    .codecRegistry(com.mongodb.MongoClient.getDefaultCodecRegistry()).socketSettings(sockSettings) 
    .connectionPoolSettings(connPoolSettings).credentialList(credentials)) 
    .clusterSettings(clusterSettings).build(); 
LOG.info("MongoClientSettings: {}, {}, {}, {}", sockSettings, connPoolSettings, clusterSettings, credentials); 
MongoClient mgc = MongoClients.create(settings); 

正常驱动程序

MongoClientOptions settings = MongoClientOptions.builder().readPreference(readPreference) 
    .codecRegistry(com.mongodb.MongoClient.getDefaultCodecRegistry()).build(); 
MongoClient mgc= new MongoClient(servers,credentials,settings); 
相关问题