如何按文档修改时间对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 );
关键修改说明
- 分组键改用
t.path:t.path是任务所在文档的完整路径,比t.key更明确,避免潜在的键值歧义 - 直接从分组任务中取修改时间:分组后的
group.rows包含当前文档下的所有任务,取第一个任务的file.mtime就能拿到文档的修改时间,无需额外调用dv.page()查询,效率更高 - 排序方向改为
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
相关产品推荐
相关产品推荐

