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.name | Text | 文件名 |
| file.folder | Text | 所在文件夹 |
| file.path | Text | 完整路径 + 完整文件名 |
| file.ext | Text | 扩展名 |
| file.link | Link | 链接至本文件 |
| file.size | Number | 文件大小 (bytes) |
| file.ctime | Date Time | 创建时间 |
| file.cday | Date | 创建日期 |
| file.mtime | Date Time | 最后修改时间 |
| file.mday | Date | 最后修改日期 |
| file.tags | List | 文中的标签和 YAML 中的 tags |
| file.etags | List | 文中的标签和 YAML 中的 tags |
| file.inlinks | List | 反向链接 |
| file.outlinks | List | 正向链接 |
| file.tasks | List | 文中的任务列表 |
| file.lists | List | 文中的列表 (包含任务列表) |
| file.frontmatter | List | 文件中的 YAML 块内容 |
| file.starred | Boolean | 加星 |
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):重构详情,更易于阅读