这篇文章是 Obsidian Dataview 系列 系列 15 篇文章中的第 4 篇

继上篇 YAML 简介后[[Obsidian插件Dataview —— YAML简介(二)]],本章介绍 Dataview 的数据查询方式

一、DQL 查询语言

Dataview 插件为 Obsidian 提供了强大的数据查询和可视化功能。通过使用 Dataview 查询语言(DQL),用户可以创建复杂的查询来检索、处理和展示 Obsidian 笔记库中的信息。DQL 支持四种主要的查询类型:TABLELISTTASK 和 CALENDAR,每种类型都有其特定的用途和语法。

1. TABLE 类型

TABLE 查询类型用于生成表格形式的输出。你可以指定要显示的列和它们的排序方式。

TABLE WITHOUT ID file.name AS 文件名, file.cday AS 创建时期
WHERE file = this.file

结果:
image.png|1000

2. LIST 类型

LIST 查询类型用于生成列表形式的输出。你可以指定要显示的字段和它们的排序方式。

LIST WITHOUT ID file.name
WHERE file = this.file

结果:
image.png|1000

3. TASK 类型

TASK 查询类型专门用于检索和展示任务。你可以根据任务的完成状态、截止日期等属性进行筛选和排序。

TASK
FROM "10 Example Data/dailys"
WHERE "#journal" AND completed
LIMIT 5

结果:
image.png|1000

4. CALENDAR 类型

CALENDAR 查询类型用于生成日历视图,展示具有日期属性(如截止日期或开始日期)的任务或事件。

CALENDAR file.day
FROM "10 Example Data/dailys"

结查:
image.png|1000

二、内联 DQL 查询

这种方式使用内联块格式(而不是代码块)和可配置的前缀来将内联代码块标记为 DQL 块,语法如下:

`= <变量名>`

注意:这里的 = 是可以在 DataView 选项中指定为其它符号的,例如:dv: 或者 ~,但通常我们保持默认。

我们可以在文档中任意位置插入内联 DQL:

今天是:`= date(today)` 我还有 < `= [[打造极致体验笔记:Obsidian Meta Bind 插件使用]].file.name` > 计划要去写!

结果:

今天是:2024-04-26 我还有 <打造极致体验笔记:Obsidian Meta Bind 插件使用> 计划要去写!

注意:DataView 提供的各种函数我们同样也可以在内联 DQL 中使用,后续会介绍各种函数的使用。

三、使用 DataviewJS 查询

使用 DataView 提供的 JavaScript API 可以实现复杂的功能,结合 DataView 和 Obsidian API,你可以实现一些有趣且复杂的功能。

在使用时只需要将代码块的类型设置为 dataviewjs 即可:

let currentFilename = dv.current().file.name
dv.list([currentFilename])

上面的示例直接将当前文档的文件名作为列表查询结果显示。

四、使用内联 DataviewJS 查询

内联 JavaScript 的写法如下,同样也可以通过选项来更改语法前缀为 dvjs: 或 $~

`$= dv.current().file.name`

下面是一个显示当前任务进度的进度条代码:

[任务完成度:: `$= const value = Math.round(((dv.page("Obsidian 达人成长之路 #1:使用终极工具 Dataview 释放笔记库的潜力 · DQL查询语言").file.tasks.where(t => t.completed).length) / (dv.page("Obsidian 达人成长之路 #1:使用终极工具 Dataview 释放笔记库的潜力 · DQL查询语言").file.tasks).length || 0) * 100); "<progress value='" + value + "' max='100'></progress>" + " " + value + "%"`]

结果:
⚠️upload failed, check dev console
image.png|1000

系列目录<< Obsidian插件Dataview —— 认识属性(三)Obsidian插件Dataview —— DQL查询语言详解(五) >>