Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB Spring聚合引发异常_Spring_Mongodb - Fatal编程技术网

MongoDB Spring聚合引发异常

MongoDB Spring聚合引发异常,spring,mongodb,Spring,Mongodb,这是我的JSON { "_id" : ObjectId("5c7a590350d039fdc86e4e37"), "cropData" : { "cropName" : "RICE", "crop" : "RICE", "cropAcres" : 10.0, "cropYield" : 73.0, "cropPrice" : 3619.0 }, "creationTime" : "15

这是我的JSON

{
    "_id" : ObjectId("5c7a590350d039fdc86e4e37"),
    "cropData" : {
        "cropName" : "RICE",
        "crop" : "RICE",
        "cropAcres" : 10.0,
        "cropYield" : 73.0,
        "cropPrice" : 3619.0
    },
    "creationTime" : "1551521509975",
    "villageId" : "581edb59e4b0b5b1ebbfe757"
}
在名为
FarmerCropDataLog
的集合中有1000个类似的条目。我想从这个
FarmerCropDataLog
中获取特定村庄的最高值和平均值。为此,我编写了以下代码

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

            Farmer farmer = this.getFarmerById(requestFarmerId);

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

            MatchOperation matchOperation = Aggregation.match(Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).elemMatch(Criteria.where(CropData.Constants.CROP).is(getComparisonSheet.getCrop()))
                                    .andOperator(Criteria.where(FarmerCropDataLog.Constants.VILLAGE_ID).is(villageId))
                                    .andOperator(Criteria.where(FarmerCropDataLog.Constants.CREATION_TIME).gt(LAST_YEAR)));

            GroupOperation groupOperation  = Aggregation.group(FarmerCropDataLog.Constants.VILLAGE_ID);
            groupOperation.avg(CropData.Constants.CROP_PRICE).as("averageIncome");
            groupOperation.max(CropData.Constants.CROP_PRICE).as("maxIncome");

            Aggregation aggregation = Aggregation.newAggregation(matchOperation,groupOperation);
            AggregationResults<GetComparisonSheetResponse> aggregationResults = farmerCropDataLogDAO.runAggregation(aggregation,FarmerCropDataLog.class,GetComparisonSheetResponse.class);  
            List<GetComparisonSheetResponse> getResult = aggregationResults.getMappedResults();

            GetComparisonSheetResponse comparisonSheetResponse = getResult.get(0);
            response.setResponse(comparisonSheetResponse);
            response.setSuccess(true);
        }

好的,多亏了@Neil,我改变了我的问题,改变了代码

我已更改了此代码

MatchOperation matchOperation = Aggregation.match(Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).elemMatch(Criteria.where(CropData.Constants.CROP).is(getComparisonSheet.getCrop()))
                                    .andOperator(Criteria.where(FarmerCropDataLog.Constants.VILLAGE_ID).is(villageId))
                                    .andOperator(Criteria.where(FarmerCropDataLog.Constants.CREATION_TIME).gt(LAST_YEAR)));
对此->

MatchOperation matchOperation = Aggregation.match(Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).elemMatch(Criteria.where(CropData.Constants.CROP).is(getComparisonSheet.getCrop())
                    .and(FarmerCropDataLog.Constants.VILLAGE_ID).is(villageId)
                    .and(FarmerCropDataLog.Constants.CREATION_TIME).gt(LAST_YEAR)));

好的,多亏了@Neil,我改变了我的问题,改变了代码

我已更改了此代码

MatchOperation matchOperation = Aggregation.match(Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).elemMatch(Criteria.where(CropData.Constants.CROP).is(getComparisonSheet.getCrop()))
                                    .andOperator(Criteria.where(FarmerCropDataLog.Constants.VILLAGE_ID).is(villageId))
                                    .andOperator(Criteria.where(FarmerCropDataLog.Constants.CREATION_TIME).gt(LAST_YEAR)));
对此->

MatchOperation matchOperation = Aggregation.match(Criteria.where(FarmerCropDataLog.Constants.CROP_LOG).elemMatch(Criteria.where(CropData.Constants.CROP).is(getComparisonSheet.getCrop())
                    .and(FarmerCropDataLog.Constants.VILLAGE_ID).is(villageId)
                    .and(FarmerCropDataLog.Constants.CREATION_TIME).gt(LAST_YEAR)));

例外是什么?您应该提供返回的任何错误,因为它提供了人员上下文。它会抛出只打印内部错误的异常。您被要求在问题中实际显示任何返回的错误。“请这样做。”尼尔伦补充道。好了,“上下文”!现代API版本(与过去4年一样)使用
Document
而不是
BasicDBObject
。这是哪个版本的spring mongo?您是否遵循多年前编写的旧教程?您是否尝试过更新项目中的spring mongodb依赖项?例外情况是?您应该提供返回的任何错误,因为它提供了人员上下文。它会抛出只打印内部错误的异常。您被要求在问题中实际显示任何返回的错误。“请这样做。”尼尔伦补充道。好了,“上下文”!现代API版本(与过去4年一样)使用
Document
而不是
BasicDBObject
。这是哪个版本的spring mongo?您是否遵循多年前编写的旧教程?您是否尝试过更新项目中的spring mongodb依赖项?