Obsidian Dataview
Obsidian 社群外掛,把 vault 裡的所有 markdown 檔當資料庫,用類 SQL 語法即時查詢。Vincent vault
wiki/index.md底部的 live view 都靠它。沒有它,wiki 只能手寫快照。
為什麼 Dataview 是 vault 必裝
Obsidian 預設只能搜尋 + 雙鏈。當 entity 數量超過 100,手寫索引會跟不上實況——這時 Dataview 就是救星。
Vincent vault 在 wiki/index.md 同時保留:
- 上半段:手寫快照(給 LLM 讀的 single-context-window 主目錄)
- 下半段:Dataview live block(給 Obsidian 端讀的真實狀態)
兩者不一致時相信 Dataview。
三大查詢類型
| 類型 | 語法 | 用途 |
|---|---|---|
| TABLE | TABLE col1, col2 FROM ... | 表格列出 |
| LIST | LIST FROM ... | 純清單 |
| TASK | TASK FROM ... | 抓 todo |
Vincent vault 用到的查詢範例
各 domain 條目數一覽
TABLE WITHOUT ID
key AS "Domain",
length(rows) AS "頁數",
rows.file.link[0] AS "範例頁"
FROM "wiki/entities"
GROUP BY domain
SORT key ASC→ ⚠️ GROUP BY 後,原始欄位變成隱式 key(單欄)或 rows.X[0](取 group 內第一筆)。直接寫 domain / file.link 會空白——這是常見坑。
各 domain × type 矩陣
TABLE WITHOUT ID
rows.domain[0] AS "Domain",
rows.type[0] AS "Type",
length(rows) AS "頁數"
FROM "wiki/entities"
GROUP BY domain + " / " + type
SORT rows.domain[0], rows.type[0]列某 domain 全部頁
TABLE WITHOUT ID file.link AS "頁面", type AS "類型", status
FROM "wiki/entities/claude"
SORT type, file.name→ 這種沒 GROUP BY 的查詢可以直接用 file.link / type / status。
找孤兒(沒任何 backlink)
LIST
FROM "wiki/entities"
WHERE length(file.inlinks) = 0找 draft 待審
LIST
FROM "wiki/entities"
WHERE status = "draft"Top 10 hubs(被引用最多)
TABLE WITHOUT ID file.link AS "頁面", domain, length(file.inlinks) AS "inlinks"
FROM "wiki/entities"
SORT length(file.inlinks) DESC
LIMIT 10常見陷阱
1. GROUP BY 之後欄位變 key
# ❌ 錯:file.link 在 GROUP BY 後沒值
TABLE file.link, length(rows)
FROM "wiki/entities"
GROUP BY domain
# ✅ 對:用 key / rows.X[0]
TABLE WITHOUT ID
key AS "Domain",
rows.file.link[0] AS "範例",
length(rows) AS "頁數"
FROM "wiki/entities"
GROUP BY domain→ Vincent vault 在 2026-05-02 踩過這坑(user 看到「都空的」截圖)。
2. WITHOUT ID
預設 TABLE 第一欄是檔案連結。WITHOUT ID 可以隱藏,自己控制欄位順序。
3. 字串大小寫敏感
status = "draft" ≠ status = "Draft"。建議 vault 規範統一小寫。
4. 路徑要用引號
FROM "wiki/entities" ✅
FROM wiki/entities ❌(會被解析成 tag)
5. SORT 多欄位
SORT domain ASC, type ASC, file.name ASC
→ 沒寫的話順序隨機。
DataviewJS — 進階模式
如果 SQL 不夠用,Dataview 還支援 dataviewjs(用 JavaScript 寫)。例:
```dataviewjs
const pages = dv.pages('"wiki/entities"')
.where(p => p.domain === "claude" && p.status === "draft");
dv.table(["頁面", "更新日"],
pages.map(p => [p.file.link, p.updated]));
```
→ Vincent vault 目前沒用 dataviewjs,純 SQL 已夠。
跟 Heptabase / Notion 的對比
| 工具 | 查詢能力 |
|---|---|
| Obsidian + Dataview | ⭐⭐⭐⭐⭐(SQL-like、live、本地) |
| Notion Database | ⭐⭐⭐⭐(filter / sort,但跨 page 弱) |
| Heptabase | ⭐⭐(tag filter 為主,沒查詢) |
| Roam | ⭐⭐⭐(query block 但語法陡) |
→ Dataview 是 Obsidian 在「結構化查詢」面穩贏的優勢。Vincent 為什麼選 Obsidian 當 vault 後端,這點是關鍵之一。
安裝
Settings → Community plugins → Browse → 搜尋 “Dataview” → Install + Enable。
對 Vincent vault 的角色
- wiki/index.md 底部 8 個 live block(domain × type 矩陣 / 各 domain 頁 / 最近更新 / 孤兒檢查 / draft 待審 / Top 10 hubs)全靠 Dataview
- 每次 ingest 後手寫快照可能跟不上、Dataview 永遠是真相
- 健檢時先看 Dataview 找孤兒 / draft → 跑 wiki-lint 找深層問題
反模式
- ❌ 手動維護 index 不靠 Dataview → 累、容易過時
- ❌ Dataview 寫法錯沒驗證 → 「都空的」(GROUP BY 坑)
- ❌ 大量 dataviewjs → 效能 + 可讀性都差
- ❌ Dataview 取代 wiki-lint → Dataview 不抓矛盾、god-node、語意問題
相關概念
強連結
推斷連結(LLM 認為相關,待確認)
- wiki-ingest ?? — Dataview 的 query 結果可作 ingest 提示
- 數位筆記工具比較 ?? — Dataview 是 Obsidian 的關鍵差異點
深入閱讀
- 原文:Obsidian 新手教學:30 分鐘從零到上手
- 官方文件:https://blacksmithgu.github.io/obsidian-dataview/
- GitHub:https://github.com/blacksmithgu/obsidian-dataview
← 回到 wiki