sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man använder Aggregation Query med MongoItemReader i vårbatch

utöka MongoItemReader och tillhandahåll din egen implementering för metoden doPageRead(). På så sätt kommer du att ha fullständigt pagineringsstöd och denna läsning av dokument kommer att vara en del av ett steg.

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();

}
}

Och andra getter och sättare och andra metoder. Ta bara en titt på källkoden för MongoItemReader här .Jag tog också bort Query-stöd från den. Du kan ha det också i samma metod, bara kopiera klistra in det från MongoItemReader. Samma sak med Sortera.

Och i klassen där du har en läsare skulle du göra något 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. Omforma alla dokument i samlingen

  2. Mongoose Aggregation filtrerar inte efter inmatningsdatum

  3. PyMongo och toArray()-metoden

  4. Matcha flera kriterier i en array