MonoDB Spring Aggregation возвращает пустой результат - PullRequest
0 голосов
/ 03 марта 2019

Я использую Агрегацию, чтобы получить Среднее и Максимальное значение из цены в селе.для этого я написал следующий код.

public void getComparisonSheet(GetComparisonSheetRequest getComparisonSheet, BasicResponse response,
            String requestFarmerId) {

        Farmer farmer = this.getFarmerById(requestFarmerId);

        // get logs before this year...
        String villageId = farmer.getVillageId();

        Criteria criteria = Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).is(getComparisonSheet.getCrop().name())
                .and(FarmerCropDataLog.Constants.VILLAGE_ID).is(villageId)
                .and(FarmerCropDataLog.Constants.CREATION_TIME).gt(LAST_YEAR);

        MatchOperation matchOperation = Aggregation.match(criteria);

        Fields fields = Fields.fields(CropData.Constants.CROP_PRICE,FarmerCropDataLog.Constants.VILLAGE_ID);
        ProjectionOperation projectionOperation = Aggregation.project(fields);

        Fields groupFields = Fields.fields(FarmerCropDataLog.Constants.VILLAGE_ID);
        GroupOperation groupOperation = Aggregation.group(groupFields);
        groupOperation.avg(CropData.Constants.CROP_PRICE).as(GetComparisonSheetResponse.Constants.AVERAGE);
        groupOperation.max(CropData.Constants.CROP_PRICE).as(GetComparisonSheetResponse.Constants.MAX_INCOME);

        LimitOperation limitOperation = new LimitOperation(MAX_RESULTS);

        AggregationOptions aggregationOptions = Aggregation.newAggregationOptions().allowDiskUse(true).explain(false).cursor(new BasicDBObject()).build();      
        Aggregation aggregation = Aggregation.newAggregation(matchOperation, projectionOperation, groupOperation
                ,limitOperation).withOptions(aggregationOptions);
        AggregationResults<GetComparisonSheetResponse> aggregationResults = farmerCropDataLogDAO
                .runAggregation(aggregation, FarmerCropDataLog.class, GetComparisonSheetResponse.class);

        List<GetComparisonSheetResponse> comparisonSheetResponses = aggregationResults.getMappedResults();
        response.setResponse(comparisonSheetResponses);
        response.setSuccess(true);
    }

Это моя структура сущности FarmerCropDataLog.

public class FarmerCropDataLog extends AbstractEntity {
    private String farmerId;
    private CropData cropData;
    private String villageId;
}

, как вы можете видеть из кода, сначала он находит все сущности по villageId,Время создания и урожай, затем он проецируется на villageId и cropPrice, и, наконец, группируя это на villageId, я определяю средний и максимальный доход для конкретной деревни, но возвращаю результат, он пустой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...