Near Query返回0个结果mongoDB

时间:2019-02-20 21:43:47

标签: spring mongodb geospatial mongodb-geospatial

根据我的要求,我想靠近工厂。我已经使用mongoDB Near Query编写了以下代码,但是它返回0个结果。我已经在二维球体上建立了索引。 geoContent方法返回0个结果。

private List<Mill> getMills(GetNearByMillsRequest getNearByMillsRequest, BasicResponse basicResponse) {
        // get farmerPosition
        LatLng fieldPosition = getNearByMillsRequest.getFieldPosition();

        double Longitude = fieldPosition.getLongitude();
        double Latitude = fieldPosition.getLatitude();

        System.out.println("Longitude : " + Longitude  + "Latitude : "+ Latitude);

        // creating GeoJson Object for farmer field location...
        GeoJsonPoint farmerFieldPosition = new GeoJsonPoint(Longitude, Latitude);
        Float distance = getNearByMillsRequest.getDistance();

        // find crop by crop Name
        Query query = new Query();
        query.addCriteria(Criteria.where(Mill.Constants.MILL_CROP_REQUIRED).elemMatch(Criteria.where(MillCropRequired.Constants.CROP).is(getNearByMillsRequest.getCrop())));        
        query.addCriteria(Criteria.where(Mill.Constants.MILL_LOCATION).near(farmerFieldPosition));

        // TODO Get radius from UserPreferences
        NearQuery nearQuery = NearQuery.near(farmerFieldPosition).maxDistance(new Distance(distance, Metrics.KILOMETERS));
        nearQuery.query(query);
        nearQuery.spherical(true);  // if using 2dsphere index, otherwise delete or set false
        nearQuery.num(10);

        GeoResults<Mill> results = millDAO.getMongoOperations().geoNear(nearQuery, Mill.class);

        System.out.println("results : " + results.getContent().size());

        if (results.getContent().isEmpty()) {
            basicResponse.setErrorCode(ErrorCode.FORBIDDEN_ERROR);
            basicResponse.setResponse("No Crop Found for this region.");
            return null;
        }

        List<GeoResult<Mill>> geoResults = results.getContent();

        //   add nearBy Mills and return this list...
        List<Mill> nearByMills = new ArrayList<>();

        for (GeoResult<Mill> result : geoResults) {
            Mill mill = result.getContent();
            nearByMills.add(mill);
        }

        return nearByMills;
    }

整齐的查询返回的结果始终为空,因此它会打印 NO Crop Fount (没有作物源)。

0 个答案:

没有答案