Search code examples
mongodbspring-mongodbspring-mongo

java mongodb near query


User collection:

"userID":"1",
"location" : [ 
        77.667248, 
        13.0258562
    ],
 "latlong" : {
        "type" : "point",
        "coordinates" : [ 
            77.667248, 
            13.0258562
        ]
    },

Java query:

 Query mongoQuery1 = new Query();
            mongoQuery1.addCriteria(Criteria.where("latlong.coordinates").near(point));
            mongoTemplate.find(mongoQuery1, User.class,"places");


  Query mongoQuery2 = new Query();
            mongoQuery2.addCriteria(Criteria.where("location").near(point));
            mongoTemplate.find(mongoQuery2, User.class,"places");

I am using above two java queries to get nearby users but getting exception like this below.I have created 2dsphere index also on user collection.

Exception:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.geo.Point] to type [org.bson.Document]
    at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:321)
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:194)

while inserting user object to collection at this time i am getting same exception

org.springframework.data.geo.Point point = new Point(12.885970,77.656180);
 User u=new User();
 u.setUserID("123");
 u.setPoint(point);
 mongoTemplate.insert(u,"places");

Please help me.Thankyou.


Solution

  • Query q=new Query(Criteria.where("userID").ne(null));
            q.with(new PageRequest(user.getPaginationNumber(),2));
                                 //longitude          //latitude
            Point p=new Point(user.getLoc().get(1),user.getLoc().get(0));
            NearQuery n=NearQuery.near(p);
            n.spherical(true);
            n.inKilometers();
            n.maxDistance(16); //16 kms
      n.num(10); //return only 10 objects
      n.query(q);
    
            GeoResults<User> results=mongoTemplate.geoNear(n,User.class,"User",User.class);