MongoDB can't parse query (2dsphere): Java API

Viewed 30

I have the following object in my Collection:

{
   "_id":"test123",
   "footprint":{
      "type":"Polygon",
      "coordinates":[
         [
            [10, 30], [20, 45], [38, 38], [43, 38], [45, 30], [10, 30]
         ]
      ]
   }
}

with index of type "2dsphere" on "footprint" attribute.

Now, I would like to implements the geospatial query "overlaps", as implemented by ST_Overlaps in PostGIS: https://postgis.net/docs/ST_Overlaps.html.

Due to the fact that MongoDB doesn't support "overlap" natively (only within, intersect and near) and according to the above definition, I whould return all overlapping documents not totally within the search area.

Using mongo-java-drivers 3.12.8, I developed the following Bson filter:

        Polygon polygon = new Polygon(
                new PolygonCoordinates(
                        Arrays.asList(
                                new Position(41.62109375000001d, 38.087716380862716d), 
                                new Position(41.870727539062514d, 37.998201197578084d), 
                                new Position(41.72393798828124d, 38.01268326428104d), 
                                new Position(41.62109375000001d, 38.087716380862716d)
                        )
                )
        );
        Bson spatialFilter = Filters.and(
                    Filters.geoIntersects("footprint", polygon), 
                    Filters.not(Filters.geoWithin("footprint", polygon))
        );

But when I execute the following:

db.collection.find(spatialFilter);

I get the following error:

Query failed with error code 2 and error message 'can't parse extra field: $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ 41.62109375000001, 38.08771638086272 ], [ 41.87072753906251, 37.99820119757808 ], [ 41.72393798828124, 38.01268326428104 ], [ 41.62109375000001, 38.08771638086272 ] ] ] } }' on server localhost:27017

As explained here MongoDB can't parse query (2dsphere): two conditions, it seems that the "$and" wrapper filter is not correctly generated.

Am I wrong? Is there any workaround?

Thanks

1 Answers

Maybe, it was a bug in 3.12.8 version. It seems fixed in 4.2.3 version

Related