>

다음 집계 파이프 라인 실행 :

public void getMostLikedItems () {
        UnwindOperation unwind = Aggregation.unwind("favoriteItems");
        GroupOperation group = Aggregation.group("favoriteItems").count().as("likes");
        SortOperation sort = Aggregation.sort(Sort.Direction.DESC, "likes");
        Aggregation aggregation = newAggregation(unwind, group, sort);
        DBObject result = mongoTemplate.aggregate(aggregation, "users", LikedItem.class).getRawResults();
}

다음 예외가 발생합니다 :

com.mongodb.MongoCommandException: Command failed with error 9: 'The 'cursor' option is required, except for aggregate with the explain argument' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "The 'cursor' option is required, except for aggregate with the explain argument", "code" : 9, "codeName" : "FailedToParse" }

커서 옵션이 무엇을 의미하는지 이해하지 못합니다. 이 옵션은 어디에 구성해야합니까?

수정다음은 샘플 사용자 문서입니다

{
  "_id": "5a6df13552f42a34dcca9aa6",
  "username": "user1",
  "password": "$2a$10$p0OXq5PPa41j1e4iPcGZHuWjoKJ983sieS/ovFI.cVX5Whwj21WYi",
  "favoriteItems": [
    {
      "_id": "5a0c6b2dfd3eb67969316d6d",
      "name": "item1",
      "city": "Rabat"
    },
    {
      "_id": "5a0c680afd3eb67969316d0b",
      "name": "item2",
      "city": "Rabat"
    }
  ]
}

  • 답변 # 1

    문서에서

    와이즈 비즈

    MongoDB 3.4 deprecates the use of aggregate command without the cursor option, unless the pipeline includes the explain option. When returning aggregation results inline using the aggregate command, specify the cursor option using the default batch size cursor: {} or specify the batch size in the cursor option cursor: { batchSize: }.

    를 통과 할 수 있습니다   batchSize 와 함께  Spring Mongo 2.x 버전

    AggregationOptions
    
    

    기본 배치 크기로

    Aggregation aggregation = newAggregation(unwind, group).withOptions(newAggregationOptions().cursorBatchSize(100).build());
    
    

  • 답변 # 2

    Aggregation aggregation = newAggregation(unwind, group).withOptions(newAggregationOptions().cursor(new Document()).build());
    
    

    호환되지 않는 버전의 MongoDB 및 Spring-data-mongo를 사용할 때 스프링 데이터에서 이러한 유형의 오류가 발생했습니다.

    설명, 커서 인수로 rawResults를 얻을 수 있습니다.

    'The 'cursor' option is required, except for aggregate with the explain argument'
    
    

    코멘트가있는 인수로 전달하면 rawResult에 결과가 표시되지만 지정된 outType.class에 매핑되지 않습니다.

    맵핑 된 결과를 얻으려면 MongoDb 버전에 따라 스프링 데이터 버전의 올바른 종속성을 다운로드해야합니다.

    수정

    Spring 버전 5.0.3Spring-data-mongoDB 버전 2.0.3을 사용했습니다. 잘 작동하고 있습니다.

    Aggregation aggregation = Aggregation.newAggregation(group).withOptions( new AggregationOptions(allowDiskUse, explain, cursor)); //try with .withOptions( new AggregationOptions(true,false,new Document()));

관련 자료

  • 이전 최신 이온 버전으로 업데이트
  • 다음 windows 10 - Windows10에서 Powershell의 DownloadFile 오류를 수정하는 방법