MongoTemplate 批量操作忽略限制

MongoTemplate bulk operations ignores limit

我有一个 employees 集合,如下所示:

{
_id
company_id
job_type
name
age
...
}

删除查询如下所示:

val criteria = Criteria.where("company_id").isEqualTo(companyId).and("job_type").isEqualTo(jobType)
val query = Query(criteria).limit(3)

当我运行它喜欢:

mongoTemplate.remove(query, null, "collection_name")

效果很好:)

当我在批量操作中 运行 时购买,例如:

val bulkOp = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, null, "collection_name")
bulkOp.remove(query)
...
bulkOp.execute()

它删除了该公司和工作类型的所有文档,同时完全忽略了 limit=3

这个问题有解决方案吗?

不支持使用游标选项进行批量写入,这与批量的设计目的相反 - 游标用于以迭代方式处理结果并多次访问服务器。另一方面,批量更新是在服务器端批量完成的。

使用 mongo 模板时删除有效的原因是在幕后,它使 multiple queries 获取所有匹配项以进行查询并提取 ID,然后再调用一次以删除这些 ID。

您也可以通过在 运行 删除 mongodb 中的批量查询之前收集 ID 来执行相同的操作。