使用 $addToSet 和 Spring Batch MongoItemWriter

Use $addToSet with Spring Batch MongoItemWriter

我目前正在使用 MongoItemWriter 实现 Spring 批处理应用程序,我需要在 mongo upsert 查询中添加一些逻辑,例如仅当数组不存在时才在数组中添加一个字段($addToSet 如果我没记错的话)。

我的第一个想法是覆盖 MongoItemWriter 以更改 saveOrUpdate 方法行为,同时保持现有 spring 批量批量配置。但是所有这部分都是私有的,所以如果我想更改 mongo 查询,我必须重写所有内容。

另一种解决方案可能是在处理器中通过查找实现 addToSet 逻辑,但它似乎没有优化(按项目查找查询)。

很奇怪 Spring 批处理不允许在保持现有事务和批量配置的同时轻松配置 mongo 查询(这提供了很多可能性)。

这里有我遗漏的东西吗?

doWritegetTemplate 方法受到保护,因此您可以重写 doWrite 并根据需要使用模板(无需处理已处理的项目缓冲或事务管理在 write 方法中)。

有了它,您应该可以完全控制项目编写,并且您可以 create/customize 根据需要进行查询。也就是说,如果您认为可以打开其他方法进行扩展,请打开一个功能请求,我们可以讨论如何提高编写器的可扩展性。