mongodb 如何使用Spring Batch读取mongo集合的所有文档?

txu3uszq  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(178)

我必须在spring batch期间从MongoDB读取整个集合,而不使用过滤器。
我已经创建了一个类XyzMongoItemReader,它在XyzMongoItemReader构造函数上扩展了MongoItemReader,我设置了以下字段:

public XyzMongoItemReader(
        final MongoTemplate template,
        final Query query) {
    setTemplate(template);
    setQuery(query);
    setTargetType(Xyz.class);
}

字符串
Xyz类用@Document注解,字段用@Field注解:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Xyz {

    @Field
    @JsonProperty
    protected String x;
    
    @Field
    @JsonProperty
    private String y;

    @Field
    @JsonProperty
    private Z z;

}


配置类为:

@Configuration
@EnableBatchProcessing
public class XyzBatchConfigurerReaderFromMongoWriterToRedis extends AbstractBatchConfigurer<Xyz, String> {

    @Autowired
    MongoTemplate mongoTemplate;

    @StepScope
    @Bean
    @Override
    public ItemReader<Xyz> reader() throws Exception {
        return new XyzMongoItemReader(mongoTemplate, new Query());
    }

    ... processor ...

    ... writer ...

}


Mongo上的集合有20条记录,但是当执行read方法时,没有检索到文档。
这三个参数是否足够?

  • 模板
  • 查询
  • targetType

“new Query()”是用来读取集合中所有文档的正确查询吗?

63lcw9qa

63lcw9qa1#

我没有设置收藏...

public XyzMongoItemReader(
        final MongoTemplate template,
        final Query query) {
    setTemplate(template);
    setCollection(Xyz.class.getSimpleName());
    setQuery(query);
    setTargetType(Xyz.class);
}

字符串
读者:

@StepScope
@Bean
@Override
public ItemReader<Xyz> reader() throws Exception {
    return new XyzMongoItemReader(mongoTemplate, new Query());
}


使用queryString而不是Query还需要setSort:

public XyzMongoItemReader(
        final MongoTemplate template,
        final String query, 
        final Map<String, Sort.Direction> sorts) {
    setTemplate(template);
    setCollection(Xyz.class.getSimpleName());
    setQuery(query);
    setSort(sorts);
    setTargetType(parametrizedType);
}


读者:

@StepScope
@Bean
@Override
public ItemReader<Xyz> reader() throws Exception {
    return new XyzMongoItemReader(mongoTemplate, "{}", Map.of("_id", Sort.Direction.ASC));
}

相关问题