给出以下文档结构:
{
"id": "123"
"traits":
{
"abc": 6.5
"def: 66
}
}
我需要遍历文档并根据条件删除一些特征。 删除了所有特征的文档也应删除。
最后,我需要跟踪删除了多少个特征和文档。
更新和删除操作不应受到阻碍,可以在更新或查询这些文档时执行。
通过执行以下查询,我使用python-arango在python中实现了此功能:使用更新/替换查询删除特征,使用删除查询删除没有特征的文档:
FOR some_doc IN some_collection
FILTER <some filter>
LET updated_doc = ...
REPLACE some_doc with updated_doc in some_collection OPTIONS { ignoreRevs: false, ignoreErrors: true }
FOR some_doc IN some_collection
FILTER LENGTH(some_doc.traits)==0
REMOVE some_doc in some_collection OPTIONS { ignoreRevs: false, ignoreErrors: true }
然后我从每个返回的游标中提取统计信息:
cursor = db.aql.execute(remove_traits_query)
stats = cursor.statistics()
modified = stats['modified']
问题是我需要防止在上述第二次查询(即删除查询)完成之前,在上述过程的执行期间启动的查询查询返回具有空特征对象的文档的可能性。
我尝试实现事务,然后像这样提交提交后拉出工作游标统计信息:
trx_db = db.begin_transaction(write=collection)
traits_removal_job = trx_db.aql.execute(remove_traits_query)
doc_deletion_job = trx_db.aql.execute(delete_query)
trx_db.commit()
stats = traits_removal_job.result().statistics()
,但是事务作业的游标为空。 我想那是因为ArangoDB将事务作为单个Javascript函数执行。
我可以过滤掉所有查找查询的空特征,但是如果我可以在单个查询中执行上述删除/更新操作(在documentation中,在ArangoDB中是不可能的)或在事务中执行上述删除/更新操作会更好(没有执行统计信息?)。
有什么建议吗?
谢谢!