Skip to content

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-14WHERE date >= date(2026-01-01)
复选框done: trueWHERE done = true
数字progress: 80WHERE 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 project

3. 自动计算完成率

结合数字属性计算项目完成进度:

dataview
TABLE 
  progress AS "进度",
  choice(progress >= 100, "✅ 已完成", choice(progress >= 50, "🔄 进行中", "⏳ 待推进")) AS "状态"
FROM "projects"
WHERE progress
SORT progress DESC

4. 日期范围查询

利用日期属性进行时间维度的查询:

dataview
TABLE category, date
FROM ""
WHERE date >= date(today) - dur(7 days)
SORT date DESC

5. 关联查询

利用链接类型的属性,实现笔记间的关联查询:

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 内置字段冲突:不要使用 filetype 等保留名

查询性能优化

  • 使用 FROM "folder" 限定搜索范围,而非全文搜索
  • 避免 FROM "" 这种全库扫描
  • 善用 LIMIT 限制结果数量
  • 复杂查询使用 DataviewJS 替代 DQL

数据一致性维护

  • 使用 Templates 或 Templater 确保属性模式统一
  • 定期用 Dataview 查询缺少关键属性的笔记并补充

相关内容