Obsidian 插件篇 -Dataview 插件的基础语法

来源

  • 触发点:学习实践 Dataview 插件,记录整理成文。
  • 首次记录:2025-03-08
  • 作者:huan

洞见

本篇文章主要梳理介绍一下 Dataview 插件的基础语法。原文地址:Obsidian插件篇-Dataview插件的基础语法

详情

📌 提示:本文中的所有代码块均使用 javascript 作为语言标识,以避免本地自动执行。若要在你的 Obsidian 中运行,请将代码块的标识从 ```js 改为 ```dataview

Dataview 完整查询语法

<QUERY-TYPE:table/list/task/calendar> <WITHOUT ID> <字段> 
FROM <来源> 
<WHERE> <条件表达式> 
<SORT> <排序依据 排序方式> 
<GROUP BY> <分组依据> 
<LIMIT> <限定显示记录数> 
<FLATTEN> <拆分表达式> 

Dataview 字段

字段类型

字段类型表达方式举例
Text用 "" 括起来的字符” 这就是 Text 类型 “
Number由符号 + - 数字 0 ~ 9 和小数点 . 组成-1.98
Boolean只有 true 和 false 两个值,表示是与否true
Date由日期和时间组成,遵循 ISO 8601 标准格式为 YYYY-MM[-DDTHH:mm:ss.nnn+ZZ]2024-08-18
Link使用双链的链接[[ a ]]
List有序/无序/任务列表- 无序列表

文件自带的属性

文件属性字段类型属性说明
file.nameText文件名
file.folderText所在文件夹
file.pathText完整路径 + 完整文件名
file.extText扩展名
file.linkLink链接至本文件
file.sizeNumber文件大小 (bytes)
file.ctimeDate Time创建时间
file.cdayDate创建日期
file.mtimeDate Time最后修改时间
file.mdayDate最后修改日期
file.tagsList文中的标签和 YAML 中的 tags
file.etagsList文中的标签和 YAML 中的 tags
file.inlinksList反向链接
file.outlinksList正向链接
file.tasksList文中的任务列表
file.listsList文中的列表 (包含任务列表)
file.frontmatterList文件中的 YAML 块内容
file.starredBoolean加星

YAML 定义属性示例

yaml 属性直接使用,无需前缀;参考以下示例。

table info,author,file.frontmatter.author
from "index"
where contains(file.name,"index")

数据来源(FROM 子句)

Dataview 支持从多种来源获取数据,包括标签、文件夹、具体文件、链接关系,甚至组合使用。

  • 按标签筛选:获取所有带 #DataView 标签的页面:

    LIST FROM #DataView 
  • 按文件夹筛选:列出 Study 文件夹中的文件,并显示别名、创建日期和是否加星:

    TABLE file.link as "文件名称", aliases as "别名", dateformat(file.cday,"yyyy-MM-dd") as "创建日期", choice(file.starred, "是", "否") as "加星" FROM "Study"  
  • 指定具体文件路径:查询 Study/Java 下的文件及其任务列表:

    TABLE file.link as "文件名", file.tasks.text as "任务名", choice(file.tasks.completed, "是", "否") as "已完成" FROM "Study/Java" 
  • 基于链接关系

    LIST FROM [[内部文件链接]] // 查询链接到 `[[内部文件链接]]` 的页面(即“入链”)
    LIST FROM outgoing([[MySQL]]) // 查询 `[[MySQL]]` 页面引用了哪些页面(出链):

补充出入链概念如下表:

概念含义Dataview 语法
入链(Inlinks)谁链接了我?LIST FROM [[MySQL]]
出链(Outlinks)我链接了谁?LIST FROM outgoing([[MySQL]])
  • 组合多个来源:同时满足“在 1.Projects 文件夹中”且“被 [[MySQL]] 引用”:

    TABLE aliases as "别名" 
    FROM "1.Projects" and outgoing([[MySQL]]) 
    SORT file.cday DESC 

过滤条件(WHERE 子句)

文本条件

  • 包含/不包含文本(icontains 忽略大小写,contains 区分大小写):

    TABLE file.link AS "文件名称" 
    FROM "Study" 
    WHERE icontains(file.name, "obsidian")
    TABLE file.link AS "文件名称" 
    FROM "Study" 
    WHERE !icontains(file.name, "obsidian")
  • 以特定文本开头或结尾:

    TABLE file.link AS "文件名称" 
    FROM "Study" 
    WHERE startswith(file.name, "Obsidian") OR endswith(file.name, "dian")
  • 大小写转换后匹配:

    TABLE file.link AS "文件名称" 
    FROM "Study" 
    WHERE startswith(upper(file.name), "OBSIDIAN") OR endswith(lower(file.name), "dian")

数值条件

  • 支持标准比较运算符( >, >=, <, , !=, =):

    TABLE file.link, rating 
    FROM #book 
    WHERE rating >= 8

日期条件

  • 格式化显示日期/时间:

    TABLE dateformat(file.cday, "yyyy-MM-dd") AS "创建日期",
    dateformat(file.ctime, "HH:mm:ss") AS "创建时间"
    FROM "Study"
  • 按日期范围筛选:

    TABLE file.link, dateformat(file.cday, "yyyy-MM-dd") AS "创建日期"
    FROM "Study"
    WHERE file.cday >= date("2023-02-19")
  • 使用动态日期函数(如 today, sow(本周开始), eow(本周结束)等):

    -- 本月创建的文件
    TABLE file.link, dateformat(file.cday, "yyyy-MM-dd")
    FROM "Study"
    WHERE file.cday.month = date(today).month
    -- 本周创建的文件
    TABLE file.link, dateformat(file.cday, "yyyy-MM-dd")
    FROM "Study"
    WHERE file.cday >= date(sow) AND file.cday <= date(eow)

布尔与链接条件

  • 布尔字段判断(如是否加星):

    TABLE file.link AS "文件名称", 
          choice(file.starred, "是", "否") AS "加星"
    FROM "study"
  • 判断是否链接到某页面:

    TABLE file.link
    FROM ""
    WHERE contains(file.outlinks, [[内部文件链接]])

演化日志

  • v0.1 (2025-02-15):初始版本输出详情
  • v0.2 (2025-03-08):完善主题,行文润色
  • v0.3 (2025-10-20):补充来源、洞见、演化日志,完善笔记结构
  • v0.4 (2025-10-25):重构详情,更易于阅读