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 来执行相同的操作。
我有一个 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 来执行相同的操作。