Properties 与 Dataview 联动
Obsidian 的 Properties(属性)和 Dataview 插件是强大的组合——Properties 提供结构化元数据,Dataview 则让这些元数据变得可查询、可聚合。本教程将深入讲解如何将两者联动,构建动态知识管理系统。
为什么需要联动?
单独使用 Properties 时,你只能手动浏览每篇笔记的属性;单独使用 Dataview 时,查询结果可能不够精确。两者联动后:
- 自动聚合:按属性值自动分组显示笔记
- 动态仪表板:生成实时更新的统计视图
- 结构化管理:通过统一的属性模式规范笔记体系
- 减少重复:属性值变化时查询结果自动更新
前置准备
1. 确保已安装 Dataview 插件
在 设置 → 第三方插件 → 浏览 中搜索 Dataview 并安装启用。
2. 启用 Properties 支持
Obsidian 1.4+ 内置 Properties 支持。确保在 设置 → 编辑器 → Properties in document 中选择了合适的方式。
3. 推荐的属性规范
为笔记建立统一的属性模式,便于后续查询:
yaml
---
title: 笔记标题
date: 2026-05-14
tags: [标签1, 标签2]
category: 分类名
status: 进行中 | 已完成 | 待办
project: 项目名
priority: 高 | 中 | 低
---基础联动示例
按状态查询任务
当笔记中添加了 status 属性后,可以用 Dataview 查询特定状态的所有笔记:
dataview
TABLE date AS "创建日期", priority AS "优先级"
FROM "projects"
WHERE status = "进行中"
SORT priority ASC按项目分组显示
dataview
TABLE rows.file.link AS "相关笔记"
FROM "projects"
GROUP BY project进阶联动技巧
1. 属性类型与 Dataview 查询优化
Properties 支持多种数据类型,不同类型在 Dataview 中的查询方式不同:
| 属性类型 | 示例值 | Dataview 查询方式 |
|---|---|---|
| 文本 | category: 开发 | WHERE category = "开发" |
| 列表 | tags: [a, b] | WHERE contains(tags, "a") |
| 日期 | date: 2026-05-14 | WHERE date >= date(2026-01-01) |
| 复选框 | done: true | WHERE done = true |
| 数字 | progress: 80 | WHERE progress >= 50 |
2. 动态统计仪表板
创建一个仪表板笔记,实时汇总所有项目状态:
dataview
TABLE
length(rows.file.link) AS "笔记数",
filter(rows.status, (s) => s = "进行中") AS "进行中",
filter(rows.status, (s) => s = "已完成") AS "已完成"
FROM "projects"
GROUP BY project3. 自动计算完成率
结合数字属性计算项目完成进度:
dataview
TABLE
progress AS "进度",
choice(progress >= 100, "✅ 已完成", choice(progress >= 50, "🔄 进行中", "⏳ 待推进")) AS "状态"
FROM "projects"
WHERE progress
SORT progress DESC4. 日期范围查询
利用日期属性进行时间维度的查询:
dataview
TABLE category, date
FROM ""
WHERE date >= date(today) - dur(7 days)
SORT date DESC5. 关联查询
利用链接类型的属性,实现笔记间的关联查询:
yaml
---
related: "[[项目A]]", "[[项目B]]"
---dataview
LIST
WHERE contains(related, [[项目A]])实战案例
案例 1:阅读笔记管理
为每篇阅读笔记添加统一属性:
yaml
---
title: 书名
type: 读书笔记
author: 作者名
rating: 4
status: 已读
date_read: 2026-05-01
tags: [非虚构, 技术]
---查询所有评分 4 星以上的书:
dataview
TABLE author AS "作者", rating AS "评分", date_read AS "读完日期"
FROM ""
WHERE type = "读书笔记" AND rating >= 4
SORT rating DESC案例 2:项目任务追踪
yaml
---
title: 任务名称
project: 项目A
assignee: 张三
status: 进行中
priority: 高
due: 2026-06-01
---查询本周到期的高优先级任务:
dataview
TABLE project AS "项目", assignee AS "负责人", due AS "截止日期"
FROM ""
WHERE priority = "高" AND due <= date(today) + dur(7 days) AND status != "已完成"
SORT due ASC案例 3:知识库健康度监控
dataview
TABLE
length(file.inlinks) AS "入链数",
length(file.outlinks) AS "出链数",
choice(length(file.inlinks) = 0, "⚠️ 孤立", "✅ 已链接") AS "状态"
FROM "notes"
SORT length(file.inlinks) ASC
LIMIT 20最佳实践
属性命名规范
- 使用小写英文和连字符:
date-created而非DateCreated - 保持一致性:全库使用相同的属性名
- 避免与 Dataview 内置字段冲突:不要使用
file、type等保留名
查询性能优化
- 使用
FROM "folder"限定搜索范围,而非全文搜索 - 避免
FROM ""这种全库扫描 - 善用
LIMIT限制结果数量 - 复杂查询使用 DataviewJS 替代 DQL
数据一致性维护
- 使用 Templates 或 Templater 确保属性模式统一
- 定期用 Dataview 查询缺少关键属性的笔记并补充
相关内容
- 属性(Properties) - Properties 基础教程
- Properties 完整指南 - 属性深度使用
- Dataview 实战 - Dataview 入门教程
- 高级 Dataview 查询案例 - 复杂查询示例
- Dataview 速查表 - 语法快速参考