如何使用Clojure在XTDB中删除文档?类查询语法实现需求
在Clojure中用XTDB删除文档的方法
XTDB的删除本质是提交**墓碑事务(tombstone)**标记文档失效,没有直接的SQL式DELETE WHERE语法,但可以通过两种方式实现你要的效果:
1. 已知文档ID直接删除
如果知道待办事项的唯一ID,直接用xt/delete提交事务即可:
;; 提交删除ID为:todo/123的待办事项 (xt/submit-tx your-xtdb-node [[:xt/delete :todo/123]])
2. 通过查询筛选后批量删除
如果需要像查询语法那样批量删除符合条件的待办(比如所有已完成的),可以先查询出目标文档的ID,再批量生成删除事务:
;; 步骤1:查询所有已完成的待办ID (def completed-todo-ids (xt/q (xt/db your-xtdb-node) '{:find [todo-id] :where [[todo-id :todo/status :completed]]})) ;; 步骤2:批量提交删除事务 (xt/submit-tx your-xtdb-node (map (fn [[id]] [:xt/delete id]) completed-todo-ids))
补充说明
- 你看到的时间范围删除是用于清理历史版本数据,和普通删除(标记当前文档失效)不是同一个场景。
- 提交删除事务后,后续查询就不会再返回被标记的文档,但历史版本数据仍可通过指定时间戳查询(除非你清理了历史)。
内容的提问来源于stack exchange,提问作者THX1137
相关产品推荐
相关产品推荐

