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

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

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

  1. public XyzMongoItemReader(
  2. final MongoTemplate template,
  3. final Query query) {
  4. setTemplate(template);
  5. setQuery(query);
  6. setTargetType(Xyz.class);
  7. }

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

  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @Document
  5. @JsonInclude(JsonInclude.Include.NON_NULL)
  6. public class Xyz {
  7. @Field
  8. @JsonProperty
  9. protected String x;
  10. @Field
  11. @JsonProperty
  12. private String y;
  13. @Field
  14. @JsonProperty
  15. private Z z;
  16. }


配置类为:

  1. @Configuration
  2. @EnableBatchProcessing
  3. public class XyzBatchConfigurerReaderFromMongoWriterToRedis extends AbstractBatchConfigurer<Xyz, String> {
  4. @Autowired
  5. MongoTemplate mongoTemplate;
  6. @StepScope
  7. @Bean
  8. @Override
  9. public ItemReader<Xyz> reader() throws Exception {
  10. return new XyzMongoItemReader(mongoTemplate, new Query());
  11. }
  12. ... processor ...
  13. ... writer ...
  14. }


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

  • 模板
  • 查询
  • targetType

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

63lcw9qa

63lcw9qa1#

我没有设置收藏...

  1. public XyzMongoItemReader(
  2. final MongoTemplate template,
  3. final Query query) {
  4. setTemplate(template);
  5. setCollection(Xyz.class.getSimpleName());
  6. setQuery(query);
  7. setTargetType(Xyz.class);
  8. }

字符串
读者:

  1. @StepScope
  2. @Bean
  3. @Override
  4. public ItemReader<Xyz> reader() throws Exception {
  5. return new XyzMongoItemReader(mongoTemplate, new Query());
  6. }


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

  1. public XyzMongoItemReader(
  2. final MongoTemplate template,
  3. final String query,
  4. final Map<String, Sort.Direction> sorts) {
  5. setTemplate(template);
  6. setCollection(Xyz.class.getSimpleName());
  7. setQuery(query);
  8. setSort(sorts);
  9. setTargetType(parametrizedType);
  10. }


读者:

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

展开查看全部

相关问题