You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Datomic/Datascript/Datalog检查所有子任务是否全部完成?

如何查询所有子任务均已完成的Block

要实现“所有子任务均已完成”的查询逻辑,核心是找到不存在任何未完成子任务的block。你之前的查询仅判断“存在至少一个已完成子任务”,因此不符合需求。下面是两种可行的实现写法:

写法一:排除存在未完成子任务的block

[:find ?ag
 :where
 ; 可选逻辑:如果只需要查询有子任务的block,保留此行;若要包含无任何子任务的block,删除此行
 [?ag :block/children ?child]
 ; 核心判断:当前block不存在未完成的子任务
 (not-exists [
   [?ag :block/children ?unfinished-child]
   [?unfinished-child :block/checked 0]
 ])
]

写法二:严格校验所有子任务标记为完成

如果需要确保所有子任务明确标记为已完成(checked=1,排除checked为其他值的情况),可以使用以下写法:

[:find ?ag
 :where
 (not-exists [
   [?ag :block/children ?child]
   ; 排除所有未标记为完成的子任务
   (not [?child :block/checked 1])
 ])
]

逻辑说明

  • not-exists 是Datomic查询中实现“全称判断”的常用方式:通过确认不存在反例,等价于“所有子项都满足条件”。
  • 第一种写法仅排除checked=0的子任务,第二种写法会排除所有checked≠1的子任务,可根据业务需求选择。

内容的提问来源于stack exchange,提问作者user1496984

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:27:21