中文文档:Dataview 基本语法学习指南 Github:obsidian-dataview
以下是 Obsidian Dataview 插件的核心使用方法总结,结合配置、语法和应用场景:
🔧 1. 安装与配置
- 安装:在 Obsidian 社区插件市场搜索 “Dataview” 并安装。
- 关键配置(插件设置中启用):
Enable JavaScript Queries:允许执行 JS 查询。Enable Inline JavaScript Queries:支持行内 JS 语法。- 日期格式建议设为
yyyy-MM-dd,时间格式设为yyyy-MM-dd HH:MM:ss。
📊 2. 元数据定义(查询基础)
Dataview 通过笔记的元数据(属性)进行查询,支持三种定义方式:
- Frontmatter(YAML区块):在笔记开头用
---包裹,例如:1 2 3 4 5--- tags: [Book, AI] rating: 4.5 due: 2025-08-20 --- - 内联字段:在内容任意位置用
字段:: 值格式,例如:进度:: 75%或[优先级:: 紧急]。 - 文件自带属性:如
file.name(文件名)、file.mtime(修改时间)等。
💡 字段命名规范:含空格或特殊字符需转小写连字符(如
Review Status→review-status)。
⚙️ 3. 查询语法(DQL)
在代码块中写入 ```dataview 后接查询语句:
- 基础结构:
TABLE|LIST|TASK [字段] FROM "文件夹" OR #标签 WHERE 条件 SORT 字段 [ASC/DESC] - 常用场景:
- 列出读书笔记:
TABLE author, rating FROM #Book SORT rating DESC - 追踪待办任务:
TASK FROM "Projects" WHERE !completed AND due <= date(today) + dur(7 days) GROUP BY priority - 最近修改文件:
TABLE file.mtime FROM "" SORT file.mtime DESC LIMIT 5
- 列出读书笔记:
- 条件过滤技巧:
- 文本:
icontains(file.name, "报告")(不区分大小写)。 - 日期:
file.cday >= date("2025-01-01")。 - 类型检查:
WHERE typeof(rating) = "number"避免类型错误。
- 文本:
💻 4. JavaScript API(高阶扩展)
在 ```dataviewjs 代码块中用 JS 实现复杂逻辑:
- 示例:动态输出页面属性:
1dv.list(dv.pages("#Book").map(p => p.file.link)); - 支持操作:
dv.table():生成表格。dv.taskList():渲染任务列表。dv.el("span", "文本"):自定义 HTML 元素。
⚠️ 5. 常见问题与优化
- 错误处理:内联字段需严格按
字段:: 值格式,文本值加引号(如状态:: "进行中"),避免Parsing Failed。 - 性能优化:
- 用标签/文件夹限定查询范围(避免
FROM ""全库扫描)。 - 避免复杂正则或全文搜索。
- 用标签/文件夹限定查询范围(避免
- 数据联动:结合 Charts 等插件可视化结果(如生成阅读进度图表)。
💎 总结
Dataview 将 Obsidian 转化为动态知识库,核心步骤:
- 定义属性 → 2. 编写查询(DQL/JS)→ 3. 自动化输出表格/任务/列表。
适合需结构化管理笔记(如项目追踪、阅读记录)的用户。
可以复用的优秀代码片段
// 仅显示以数字开头的文件夹及其标签
for (let group of dv.pages("")
.filter(p => p.file.folder != "")
.groupBy(p => p.file.folder.split("/")[0])
.filter(g => /^\d/.test(g.key))) { // 正则匹配以数字开头的文件夹名
dv.paragraph(`## ${group.key}`);
dv.paragraph(
dv.pages(`"${group.key}"`)
.file.tags
.distinct()
.map(t => `[${t}](${t})`)
.sort()
.join(" | ")
);
}
💬 评论