如何解决MongoTemplate批量操作忽略限制
我有一个员工集合,看起来像:
def get_client(self):
try:
bitbucket_token = SocialToken.objects.get(
account__user=self.user,account__provider='bitbucket_oauth2'
)
bitbucket_app = SocialApp.objects.get(provider='bitbucket_oauth2')
oauth_dict = {
'access_token': bitbucket_token.token,'access_token_secret': bitbucket_token.token_secret,'consumer_key': bitbucket_app.client_id,'key_cert': ''
}
except ObjectDoesNotExist:
raise Exception(
"User does not have a Bitbucket OAuth token"
)
try:
client = Bitbucket(
url=settings.BITBUCKET_CLOUD_API_URL,cloud=True,api_version='2.0',oauth=oauth_dict
)
except Exception as exc:
raise Exception(
"Failed to connect to the Bitbucket API {0}".format(exc)
)
return client
以及一个如下所示的删除查询:
{
_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)
效果很好:)
我在Bulk Ops中运行时购买,例如:
mongoTemplate.remove(query,null,"collection_name")
它会删除该公司和职位类型的所有文档,而完全忽略val bulkOp = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED,"collection_name")
bulkOp.remove(query)
...
bulkOp.execute()
这个问题有解决方案吗?
解决方法
不支持使用游标选项进行批量写入,这与为批量设计的目的相反-游标用于以迭代方式处理结果并多次访问服务器。另一方面,批量更新是在服务器端批量进行的。
使用mongo模板时remove起作用的原因是在幕后,这使得multiple queries
能够获取所有匹配项以进行查询并获取ID,然后再调用以删除这些ID。
您还可以通过在mongodb中批量运行删除查询之前收集ID来进行相同的操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。