sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan bruger du Aggregation Query med MongoItemReader i forårsbatch

Udvid MongoItemReader og giv din egen implementering til metoden doPageRead(). På denne måde vil du have fuld pagineringsunderstøttelse, og denne læsning af dokumenter vil være en del af et trin.

public class CustomMongoItemReader<T, O> extends MongoItemReader<T> {
private MongoTemplate template;
private Class<? extends T> inputType;
private Class<O> outputType
private MatchOperation match;
private ProjectionOperation projection;
private String collection;

@Override
protected Iterator<T> doPageRead() {
    Pageable page = PageRequest.of(page, pageSize) //page and page size are coming from the class that MongoItemReader extends
    Aggregation agg = newAggregation(match, projection, skip(page.getPageNumber() * page.getPageSize()), limit(page.getPageSize()));
    return (Iterator<T>) template.aggregate(agg, collection, outputType).iterator();

}
}

Og andre getter og sættere og andre metoder. Bare tag et kig på kildekoden til MongoItemReader her .Jeg fjernede også Query-understøttelse fra det. Du kan også have det i samme metode, bare copy-paste det fra MongoItemReader. Det samme med Sort.

Og i klassen, hvor du har en læser, ville du gøre noget som:

public MongoItemReader<T> reader() {
    CustomMongoItemReader reader = new CustomMongoItemReader();
    reader.setTemplate(mongoTemplate);
    reader.setName("abc");
    reader.setTargetType(input.class);
    reader.setOutputType(output.class);
    reader.setCollection(myMongoCollection);
    reader.setMatch(Aggregation.match(new Criteria()....)));
    reader.setProjection(Aggregation.project("..","..");
    return reader;
}


  1. Advarsel:Adgang til ikke-eksisterende egenskab 'MongoError' af moduleksporter inden for cirkulær afhængighed

  2. Hvordan gemmer man i Redis sorteret sæt med server-side tidsstempel som score?

  3. Hvordan kan jeg bruge redis med Django?

  4. Kan ikke forbinde Redis Cluster i Elasticache til PHP ved hjælp af phpredis-biblioteket