【求解決】DataView 反向鏈結 篩選語法

請問各位先進

#前情提要
我的知識庫裡面包含:「條文、附錄、文件」,三種類型的筆記,分別放在三個資料夾中,這三者之間經常會使用到[[ ]]在筆記中互相提及

#需求目標
希望可以透過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> 換行
    ])
);


1 个赞