Skip to content

Point must only contain numeric elements when using near count query with GeoJson points #4004

Closed
@sebastian-firsching

Description

@sebastian-firsching

Count queries using $near or $nearSphere require a rewrite to $geoWithin. However, according to the official MongoDB documenatation, the syntax for a $near query is different when using a GeoJSON point instead of legacy coordinates.
When creating the $geoWithin in CountQuery.createGeoWithin in combination with a GeoJSON point, the $maxDistance cannot be found, as it is nested inside the $near document. With the current implementation, $maxDistance is only detected if it is on the source level (which is the case when legacy coordinates are used):

boolean spheric = source.containsKey("$nearSphere");
Object $near = spheric ? source.get("$nearSphere") : source.get("$near");

Number maxDistance = source.containsKey("$maxDistance") ? (Number) source.get("$maxDistance") : Double.MAX_VALUE;

This results in maxDistance having the value Double.MAX_VALUE (which is 1.7976931348623157E308). When executing the rewritten query against MongoDB, this fails with the error org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 2 (BadValue): 'Point must only contain numeric elements' on server localhost:27017, as it cannot handle the scientific notation (1.7976931348623157E308) of Double.MAX_VALUE.
Could someone help with that issue?

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions