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

如何按文档修改时间对Obsidian Dataview分组任务排序

解决Obsidian Dataview按文档修改时间排序分组未完成任务的问题

你的代码未生效主要有两个核心问题:

  • 排序方向错误:要让最新编辑的文档排在顶部,得用**降序(desc)**而非升序(asc)
  • 分组后获取修改时间的方式不够准确,且对分组对象的属性引用存在问题

正确代码实现

dv.taskList(
  dv.pages('-#exclude').file.tasks
    .where(t => !t.completed)
    .groupBy(t => t.path)
    .sort(group => group.rows[0].file.mtime, 'desc'),
  false
);

关键修改说明

  1. 分组键改用t.path:t.path是任务所在文档的完整路径,比t.key更明确,避免潜在的键值歧义
  2. 直接从分组任务中取修改时间:分组后的group.rows包含当前文档下的所有任务,取第一个任务的file.mtime就能拿到文档的修改时间,无需额外调用dv.page()查询,效率更高
  3. 排序方向改为desc:降序排序会让最新修改的文档组自动移至列表顶部

备选实现(用dv.page()的方式)

如果习惯通过页面对象获取修改时间,也可以用下面的代码,效果一致但效率稍低:

dv.taskList(
  dv.pages('-#exclude').file.tasks
    .where(t => !t.completed)
    .groupBy(t => t.path)
    .sort(group => dv.page(group.key).file.mtime, 'desc'),
  false
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:52:41