sql >> Database >  >> NoSQL >> MongoDB

Aggregation Query gebruiken met MongoItemReader in lentebatch

breid MongoItemReader uit en zorg voor uw eigen implementatie voor de methode doPageRead(). Op deze manier heeft u volledige ondersteuning voor paginering en maakt het lezen van documenten deel uit van een stap.

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

}
}

En andere getter en setters en andere methoden. Kijk maar eens naar de broncode voor MongoItemReader hier .Ik heb er ook Query-ondersteuning van verwijderd. Je kunt dat ook op dezelfde methode hebben, kopieer het gewoon vanuit MongoItemReader. Hetzelfde met Sorteren.

En in de klas waar je een reader hebt, zou je zoiets doen als:

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. Mongoose gooit fout 'Veld staat niet in schema' bij het tweemaal definiëren van een veld

  2. Opvragen van ingebedde objecten in Mongoid/rails 3 (lager dan, min-operators en sorteren)

  3. mongo - kon geen verbinding maken met server 127.0.0.1:27017

  4. Mongo-query om te sorteren op verschillende telling