sql >> Databáze >  >> NoSQL >> MongoDB

Jak používat Agregační dotaz s MongoItemReader v jarní dávce

rozšířit MongoItemReader a poskytnout vlastní implementaci pro metodu doPageRead(). Tímto způsobem budete mít plnou podporu stránkování a toto čtení dokumentů bude součástí kroku.

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

}
}

A další getry a nastavovače a další metody. Stačí se podívat na zdrojový kód pro MongoItemReader zde .Také jsem z něj odstranil podporu Query. Můžete to mít také stejnou metodou, stačí ji zkopírovat a vložit z MongoItemReader. Totéž s řazením.

A ve třídě, kde máte čtečku, byste udělali něco jako:

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. MongoDb:Jak importovat data výpisu ze souboru .gz?

  2. Může $isolated přestat číst změněné dokumenty v přirozeném pořadí ve více aktualizacích?

  3. Laravel 5 Výmluvný součet vynásobených sloupců pro mongo DB

  4. MongoDB agregát() – chyba TypeError:Nelze volat metodu „forEach“ z nedefinovaného