← 返回博客

用 Obsidian Dataview 查询你保存的网页内容

· Save Team
obsidiandataviewpluginsmarkdownpkmpower-user

你已经向 Obsidian 保存网页内容好几周了。你的知识库有 50 篇,甚至 100 篇剪藏的文章。但要找到合适的那篇,你只能在文件夹中滚动浏览,或依赖全文搜索。

Dataview 改变了这一切。它将你的 Markdown 文件视为数据库——按元数据查询、按标签筛选、按日期排序,并构建自动更新的仪表板。

以下是如何为你的网页剪藏设置它。

Dataview 能做什么

Dataview 是一个 Obsidian 插件,让你可以使用类 SQL 语法查询你的笔记。每个 Markdown 文件成为一行。每个 frontmatter 字段成为一列。每个查询返回一个实时自动更新的表格。

基础:Frontmatter

Dataview 的威力依赖于剪藏文件中一致的 frontmatter。当你用 Save 保存网页内容时,添加这些元数据:

---
title: "React Server Components: 完全指南"
source: "https://example.com/rsc-guide"
clipped: 2026-03-15
type: article
status: unread
tags: [react, server-components, performance]
rating:
---

让网页剪藏可查询的字段:

  • clipped — 保存时间
  • type — article、tutorial、documentation、paper、thread
  • status — unread、reading、read、processed
  • rating — 阅读后的 1-5 评分(初始留空)
  • tags — 涵盖的主题

基本查询

阅读队列

查看所有未读剪藏,最新的排在前面:

```dataview
TABLE title, type, clipped
FROM "clips"
WHERE status = "unread"
SORT clipped DESC
```

最近阅读

过去 30 天内处理的内容:

```dataview
TABLE title, rating, tags
FROM "clips"
WHERE status = "read" AND clipped >= date(today) - dur(30 days)
SORT rating DESC
```

按主题的最佳内容

查找某个特定主题中评分最高的剪藏:

```dataview
TABLE title, rating, source
FROM "clips"
WHERE contains(tags, "react") AND rating >= 4
SORT rating DESC
```

内容类型分布

你保存了多少种类型:

```dataview
TABLE length(rows) AS Count
FROM "clips"
GROUP BY type
SORT length(rows) DESC
```

需要处理的剪藏

查找你还没有回顾的保存内容:

```dataview
TABLE title, type, clipped
FROM "clips"
WHERE !rating
SORT clipped ASC
LIMIT 10
```

构建研究仪表板

创建一个名为 Dashboard.md 的笔记来汇总所有查询:

# 研究仪表板

## 阅读队列({{date}})

### 未读文章
(dataview 查询放这里)

### 进行中
(dataview 查询放这里)

## 本周保存
(dataview 查询放这里)

## 评分最高的内容
(dataview 查询放这里)

## 按主题
(dataview 查询放这里)

每次你打开它时,这个仪表板都会自动更新。无需手动维护。

进阶:内联查询

Dataview 还支持笔记内的内联查询。在任何地方引用剪藏数量或元数据:

本月我已读了 `= length(filter(pages("clips"), (p) => p.status = "read"))` 篇文章,
平均评分为
`= round(average(filter(pages("clips"), (p) => p.rating).rating), 1)`

这将渲染为纯文本:「本月我已读了 23 篇文章,平均评分为 3.8。」

DataviewJS 处理复杂查询

对于更复杂的分析,使用 DataviewJS(JavaScript):

```dataviewjs
// 显示过去 8 周每周的剪藏数量
const clips = dv.pages('"clips"')
  .where(p => p.clipped)
  .sort(p => p.clipped, 'desc');

const weeks = {};
for (const clip of clips) {
  const week = clip.clipped.toFormat("yyyy-'W'WW");
  weeks[week] = (weeks[week] || 0) + 1;
}

dv.table(
  ["周", "保存的剪藏"],
  Object.entries(weeks).slice(0, 8).map(([week, count]) => [week, count])
);
```

保持数据干净的技巧

使用模板

为剪藏创建一个预填 frontmatter 的模板,使每次保存都保持一致:

---
title: ""
source: ""
clipped: {{date}}
type: article
status: unread
tags: []
rating:
---

规范化你的标签

选择一套标准并坚持使用。react 而不是 Reactreactjsperformance 而不是 perfweb-performance。不一致的标签会破坏 Dataview 查询。

阅读后更新状态

只有在你更新状态字段时,它才能发挥作用。当你读完一个剪藏时,花 10 秒将 status: unread 改为 status: read 并添加评分。

保留来源 URL

source 字段让你总能回到原始内容。Dataview 可以将这些渲染为可点击的链接:

```dataview
TABLE title, "[链接](" + source + ")" AS Source
FROM "clips"
WHERE status = "read"
SORT clipped DESC
LIMIT 20
```

为什么干净的 Markdown 在这里很重要

Dataview 查询你的 frontmatter,但你也会定期搜索剪藏内容。这正是 Save 干净提取的价值所在。

当你搜索知识库中的「服务器组件流式传输」时,你希望找到剪藏中的相关段落——而不是导航菜单、Cookie 横幅或侧边栏小部件。干净的 Markdown 意味着干净的搜索结果。

开始使用

  1. 在 Obsidian 中安装 Dataview 插件(社区插件 → 搜索「Dataview」)
  2. 安装 Save 进行干净的网页剪藏
  3. 使用上面的模板为你接下来的 5 个剪藏添加 frontmatter
  4. 创建一个带有阅读队列查询的仪表板笔记
  5. 看着你的知识库从一堆文件转变为可查询的知识库