請問各位先進
#前情提要
我的知識庫裡面包含:「條文、附錄、文件」,三種類型的筆記,分別放在三個資料夾中,這三者之間經常會使用到[[ ]]在筆記中互相提及
#需求目標
希望可以透過dataview表格化
以條文為基礎,分別列出「此條文」曾提及過的「附錄、文件」
表格標題為:條文、附錄、文件
#目前想法
有查詢到可以用file.outlinks ,file.inlinks這兩種語法進行關聯
但是要怎麼分別對「條文、附錄、文件」這三個欄位下不同的條件(篩選資料夾)呢?
請問各位先進
#前情提要
我的知識庫裡面包含:「條文、附錄、文件」,三種類型的筆記,分別放在三個資料夾中,這三者之間經常會使用到[[ ]]在筆記中互相提及
#需求目標
希望可以透過dataview表格化
以條文為基礎,分別列出「此條文」曾提及過的「附錄、文件」
表格標題為:條文、附錄、文件
#目前想法
有查詢到可以用file.outlinks ,file.inlinks這兩種語法進行關聯
但是要怎麼分別對「條文、附錄、文件」這三個欄位下不同的條件(篩選資料夾)呢?
感觉大致理解了一点, 实质是个查找当前笔记的出链或反链, 且按照一定条件过滤这些出链或反链
找当前笔记的反链
```dataview
TABLE
FROM [[#]]
WHERE contains(file.folder, "附錄")
```
找当前笔记的出链
```dataview
TABLE
FROM outgoing([[#]])
WHERE contains(file.folder, "文件")
```
至于 “表格標題為:條文、附錄、文件”
这个默认的 dv 查询应该是没戏, 我理解 dv 是按照数据库那个模式来的 (生成表格每行视为一个 record)
所以 “某 條文 关联了 附录 下的笔记”, “某 條文 关联了 文件 下的笔记” 这些都是合理的,
但展示为 column1=條文, column2=附錄, column3=文件 这个模式, 单独看一行它就不是有效的 record
如果必须展示为这个格式, 可能得先拿到所需数据, 自己排版表格了
謝謝回覆~我後來用 chat gpt 有達成結果
語法是:
const 本文筆記 = dv.pages('"【本文】"') // 取得 "本文" 資料夾內的所有筆記
.sort(p => p.file.name.match(/\d+/) ? parseInt(p.file.name.match(/\d+/)[0]) : p.file.name, 'asc'); // 依數字排序
dv.table(
["本文", "控制項", "程序書"], // 定義表頭
本文筆記.map(本文筆記 => [
本文筆記.file.name, // 本文欄位
dv.pages('"【控制項】"') // 從 "控制項" 資料夾篩選
.filter(控制項筆記 => 本文筆記.file.outlinks.includes(控制項筆記.file.link))
.map(p => `[[${p.file.name}]]`) // 包成 Obsidian 連結格式
.join("<br>"), // 用 HTML <br> 換行
dv.pages('"【程序書】"') // 從 "程序書" 資料夾篩選
.filter(程序書筆記 => 本文筆記.file.outlinks.includes(程序書筆記.file.link))
.map(p => `[[${p.file.name}]]`) // 包成 Obsidian 連結格式
.join("<br>") // 用 HTML <br> 換行
])
);