十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

快速上手:把 Obsidian 笔记库变成可查询数据库的 3 步(Dataview 指南)

快速上手:把 Obsidian 笔记库变成可查询数据库的 3 步(Dataview 指南) 快速上手把 Obsidian 笔记库变成可查询数据库的 3 步Dataview 指南【免费下载链接】obsidian-dataviewA data index and query language over Markdown files, for https://obsidian.md/.项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-dataview在 Obsidian 里管理几百篇笔记时想找去年读过的、评分 9 以上的科幻小说只能逐篇点开翻。Dataview 是一个 Obsidian 插件作用是把你的笔记库变成可查询的数据库它先索引你在 Markdown 里标注的元数据以及文件名、标签、任务等自动生成的字段再用一条查询语句完成筛选、排序、分组和展示。整个流程就三步标数据、写查询、调组合。 标注笔记把元数据变成可查询的字段Dataview 只能查询它看得见的数据。让数据被看见有三种方式方式语法适合放什么YAML 前置元数据笔记顶部的---块整篇笔记的属性如评分、作者、类型行内字段rating:: 9或[rating:: 9]紧贴某一行文字或某个任务的数据内置字段无需标注文件名、标签、任务、创建时间自动索引--- genre: 科幻 rating: 9 time-read: 2021-03-03 ---这三行写在笔记开头genre、rating、time-read就能被查询到。日期写成YYYY-MM-DD格式会被识别为日期类型之后可以直接做大小比较。行内字段则写在正文里不用翻回笔记顶部《沙丘》这个月读完了。[rating:: 10] [mood:: 略长但值得] - [ ] 重写这篇书评 [due:: 2021-04-10]前一行把评分和感受嵌在句子里第二行给一个任务加了截止日期due任务和列表项的字段必须用方括号语法包住才能挂到这一行上。 写出第一条查询把文件夹渲染成排序表格新建一篇笔记粘入这个最小可运行示例切到预览模式即可看到结果TABLE time-played AS 游玩时间, length AS 时长, rating AS 评分 FROM games SORT rating DESC这几行做了三件事TABLE指定按表格输出三列FROM games把数据范围限定在 games 文件夹及其子文件夹里的笔记SORT rating DESC按评分从高到低排序AS 评分只是改列标题不改数据。渲染效果如下Dataview TABLE 查询结果13 条游戏笔记按评分降序排列名称列可点击跳转到对应笔记 组合数据命令筛选、排序、分组复用除FROM外最多一条且必须紧跟查询类型之后其余命令可以写多条、任意顺序Dataview 按书写顺序逐条执行。筛选并排序WHERE只保留条件成立的笔记SORT支持多字段前一字段相同时用后一字段决胜TASK FROM #projects WHERE !completed SORT due ASC LIMIT 10这条查询把 projects 标签下所有笔记里的未完成任务汇成一份可交互的任务清单按截止日期升序、只显示 10 条在这里勾选任务原笔记里的内容会同步更新。分组与聚合GROUP BY把多条笔记按同一字段值捆成一行每行带一个rows数组存所有命中的笔记rows.rating会自动取出每篇笔记的 rating再交给average()、length()这类聚合函数。反方向的操作是FLATTEN把一个数组拆成每元素一行适合一本多作者、按作者展开的场景。大仓库里建议加LIMIT控制结果数量。完整的命令语法见 docs/docs/queries/data-commands.md如果习惯 SQL文档里还单独有一页对比 DQL 与 SQL 的差异值得先读。按日期展示CALENDAR把每条结果渲染成日历上某天的一个点用来回答这段时间笔记都在什么时间活跃Dataview CALENDAR 查询每个圆点代表当天的一条笔记点越密说明当天的笔记活动越多用 DataviewJS 扩展查询语言不够用的部分DQL 覆盖不了的场景——多重分组、自定义排版——可以换成 DataviewJS在代码块里直接写 JavaScriptdv.pages()会把可查询的笔记变成 JS 对象数组。for (let group of dv.pages(#book).where(p p[time-read].year 2021).groupBy(p p.genre)) { dv.header(3, group.key); dv.table([Name, Time Read, Rating], group.rows.sort(k k.rating, desc) .map(k [k.file.link, k[time-read], k.rating])); }这段代码把 2021 年读完的书按类型分成几个小节每个小节内部再按评分排序DataviewJS 分组渲染效果书籍按类型拆成 Dystopia、Nonfiction、Science Fiction 等四个表格行内书名可跳转原文有一个安全前提DataviewJS 以插件权限运行可以创建、修改文件而普通dataview查询是沙箱化、只读的。所以只写自己看得懂的 JS别人的脚本先审一遍再用。查询查不到结果时的排查与第一步问查询会改动我的笔记吗普通dataview查询是只读的唯一会写回的是 TASK 清单里的勾选它更新的是笔记里任务本身的内容。问查询返回空结果怎么排查三步走先用LIST FROM 源确认能取到笔记再输出一列file.tags看标签是否真的存在最后用typeof(rating)验证字段类型。空结果多半出在字段名拼写——含空格的字段名会自动规范成小写加连字符如Basic Field变成basic-field查询里必须用规范后的名字。问加完字段查询不到索引随文件变化更新不用等。查不到的先检查语法行内字段是双冒号::前置元数据是单冒号两者不要混用。现在就能做的第一步挑一个 5 到 10 篇笔记的文件夹给每篇补上rating、due之类的字段再把上面TABLE示例里的文件夹名换成它——表格渲染出来的那一刻整套流程就跑通了。【免费下载链接】obsidian-dataviewA data index and query language over Markdown files, for https://obsidian.md/.项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-dataview创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表