Post by tag

按标签聚合

包含 # dataview 的文章列表

Obsidian 达人成长之路_1:使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言

使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言

️DataView 是 Obsidian 社区中的热门插件,它为用户提供了一个强大的实时索引和查询引擎。通过在文档中设置属性(或称为元数据),DataView 能够检索并处理这些数据。借助 DataView,用户可以轻松列出、筛选、排序和分组数据,这与使用数据库查询语言类似。 在 Obsidian 中,我们使用“属性”来描述文档中由官方或第三方插件提供的描述变量,这些变量也被称为“元数据”。在 DataView 的语境下,虽然名称有所差异,但它们实际上指的是同一实体。为了保持一致性,后续文章中我们将统一使用“属性”来描述这些变量。 考虑到不同读

jenemy

jenemy

Pkmer

Dataview 提供的函数 Function

基本语法学习指南,Function 函数

Dataview 提供了一些函数让我们能够加工查询的结果,你可以在除了 From 以外的地方使用。 Dataview 提供了非常丰富的函数让我们处理数据,这些函数主要有五类。正文对函数作大致介绍,并且提供具体介绍的链接,如果对中文介绍有疑问,也可以自行在官方英文文档查看原文( Functions - Dataview ) 首先我们要知道什么是函数?没有编程基础的人可能会有这个疑问。其实代码的函数演化自数学上的函数。数学上的函数是一种映射关系,给定一个输入值 x,在函数 f 的作用下把这个值映射成另一个值 $y=f(x)$,在这里也一样。例如

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 中的对象操纵函数

这类函数用于操作容器对象内部的值(14 个); 这四个功能相近,都是判断是否包含某个值的。但是他们又不尽相同,看好区别选择你需要的使用。 检查给定容器类型是否包含给定的值。根据第一个参数是对象、列表还是字符串,该函数的行为略有不同。此函数区分大小写。 容器类型:对象、列表和字符串 有两个输入值,前一个是容器类型数据,后一个是需要判断是否包含在前者的数据。 区分大小写 contains("Hello", "Lo") ="Lo" 不包含在 "Hello" 中,因此会返回 fal

Huajin

Huajin

Pkmer

Dataview 中的实用函数

为属性添加一个默认值。具体的来说就是,如果属性值为空,则返回默认值 value;否则返回属性值。 例如,如果你有个属性 compleDate 代表完成时间,但是在你完成之前不会在笔记中填上,用 dataview 统计的时候会显示空格。这时候你就可以用这个函数 default(compleDate, "未完成") 将所有空值用 " 未完成 " 代替,比显示空格更加直观。 有的时候我们只需要判断这个属性是否有值,如果某个属性不是空值,但是属性值是一个列表,并且这个列表有空值。如果使用 default() 会把列表中的所有空值都替换了,这时候

Huajin

Huajin

Pkmer

Dataview

Dataview 高性能的索引笔记文件,并创建复杂的查询视图,如表格,列表,任务,日历视图

Obsidian 是一款强大的知识管理和笔记应用程序, Dataview 插件为 Obsidian 提供了更高级的数据查询和可视化功能,可帮助用户更好地组织和分析笔记内容。 Dataview 插件的用途主要有三个方面。 首先,Dataview 插件可以用于创建复杂的数据查询和筛选。用户可以使用类似于 SQL 的语法,通过在笔记中标记和注释特定的数据字段或属性,然后利用 Dataview 插件进行搜索、过滤和排序。这样能够很方便地查找特定信息、生成特定条件下的数据集合,或者执行一些统计和计算操作。这对于处理大量信息的复杂项目

Windysoul,Huajin,PKMer Windysoul,Huajin,PKMer Windysoul,Huajin,PKMer

Windysoul,Huajin,PKMer

Pkmer

Dataview 中的DQL 与 SQL 的区别

基本语法学习指南,DQL 与 SQL 的区别

如果你熟悉 SQL 并且具有编写 SQL 查询的经验,你可以用编写 SQL 的方式编写 DQL 查询。但是 DQL 与 SQL 有很大不同。 DQL 查询从上到下逐行执行。它更像是一个计算机程序,而不是一个典型的 SQL 查询。 计算一行时,它会生成一个结果集,并将整个结果集传递到下一个 DQL 行。该行将对从上一行接收的集合做下一步操作。这就是为什么在 DQL 中可以有多个 WHERE 子句的原因。但在 DQL 中,它不是一个“子句”,而是一个“数据命令”。DQL 查询的每一行(第一行和第二行除外)都是一个“数据命令”。

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 中的字符串操纵函数

谈到字符串,绕不开的就是 正则表达式]([正则表达式 – 教程 菜鸟教程 (runoob.com),你可以自己花半个钟学习一下正则表达式的简单语法,也可以抛出要求让 AI 替你写对应的正则表达式。 字符串的正则匹配,判断字符串是否满足给定的 pattern 模式。(使用 JavaScript regex 引擎)。 需要输入一个用于判断的正则表达式以及一个待判断的字符串。如果字符串存在符合正则表达式的部分则返回 true,否则返回 false。 \w 匹配字母、数字、下划线。等价于 [A-Za-

Huajin

Huajin

Pkmer

Dataview 中的数值运算函数

既然有数值这种数据类型,我们免不了需要对他们进行一些运算,如果单纯的加减乘除无法满足我们的各种需求,可以在下边找找有没有你用得上的函数,比如一些四舍五入或者取整的函数,一些修改小数点后显示位数的函数,求和函数,求最大、最小和平均值的函数等。大多数函数的功能其实从他们的名字就能猜测出来。 round 有整数的意思,这里是对数值进行四舍五入; number 说明输入值的数据类型应该是一个数值,digits 有中括号说明这个位置可有可无,用于确定四舍五入的精度,或者说是保留的小数个数。默认四舍五入为整数,也就是 digits 的默认值

Huajin

Huajin

Pkmer

Dataview 中的构造函数

Dataview 提供了 11 个构造函数,可以将输入值转换为其他数据类型,也就是强制类型转换。这一类函数的函数名通常和数据类型有关,比如 number() 函数可以把输入值转换成数值类型,string() 函数可以把输入值转换成字符串类型。 把输入值以键值对的形式转换成一个对象,返回值自然就是这些键值对构造成的一个对象,也就是 object; 有省略号说明可以有很多个输入值,但是必须是偶数个,否则就会有属性为空值,Dataview 会报错; 对于每一对输入值来说,前一个输入值 key1 是对象的第一个属性名,后一个输入值 val

Huajin

Huajin

Pkmer

44 - Dataview 设置介绍

Dataview 设置介绍

由于 dataview 设置均为英文,此处提供一下各个设置的介绍。 版本:0.5.66 Dataview 的设置分为三个部分 dataview 共提供了四种查询方式,行内 dv 查询,dv 代码块查询,行内 dvjs 查询,dvjs 代码块查询,详见 20 - 四种查询方式。其中 dv 代码块查询是默认启用的,也是本插件的核心功能,未提供关闭选项。 ![](https://cdn.pkmer.cn/images/20240422222641.png!pkmer) ![image.png](https:

Huajin

Huajin

Pkmer

Dataview 表格进阶查询示例

dataview TABLE FROM type/books WHERE author = "Conrad C" dataview TABLE author, pagesRead, totalPages FROM type/books Dataview 表格进阶查询示例 dataview TABLE WITHOUT ID source, time, ingredients FROM "10 Example Data/food" WHERE source Dataview 表格进阶查询示例 datav

Huajin

Huajin

Pkmer

Dataview 语法实战:行内 DQL 示例

介绍了 Dataview 的一些基础的 Inline DQL 的使用实例

与带有三个反引号的代码块查询不同,行内查询用于笔记的文本、标题中,而不是为它们需要一个孤立的块。行内查询的结果可以随着查询值的改变动态改变。 行内 DQL 需要写在行内代码中,适合小范围嵌入元数据使用; Dataview 的行内 DQL 示例 需要借助关键字 this 指代本文件,用点运算符指向文件的其他元数据。例如你想在文中某处插入文件的创建时间,你可以这样写

Huajin

Huajin

Pkmer

Dataview 语法实战:FLATTEN 操作符进阶示例

如果有多个元数据是数组,你想把他们都拆开,可以重复利用 FLATTEN 操作符来实现,例如下面的 DQL 用了两次 FLATTEN 函数 dataview TABLE genres, booktopics FROM "10 Example Data/books" FLATTEN genres FLATTEN booktopics 我们前面说过,FLATTEN 和 Group by 可以理解为反义词,那么如果对同一个属性加以 FLATTEN,随即跟上 Group by。他的结果会跟原来的结果一模一样吗?答案是不一定。因为我们展开的时候,

Huajin

Huajin

Pkmer

Dataview 实战:制作一个倒计时或者正计时列表

用 Dataview 制作一个倒计时或者正计时列表,展示了今天、本周、本月和今年的剩余时间和已经过去的时间跨度以及百分比。文中给出了代码的具体解释,以及你想定制相对某个特定时间点时修改的方法。

Dataview 是你进阶使用 Obsidian 中不可缺少的一步,通常我们会用 Dataview 来统计收集你的库中满足特定条件的所有笔记。但是你有没有想过,DQL 提供了很多关于时间的 15 - Literals 字面常量字面量,我们完全可以用他们来记录时间。 Pasted image 20230915140109.png 上面这些,通通是用的 Dataview 的行内查询 (Inline DQL) 实现的,所有的时间记录都会自动修改,不需要手动修改。 上面图片中使用的源码如下,你可以直接复制全部放到你的首页,也可以只复制其中你

Huajin

Huajin

Pkmer

Dataview 列表进阶查询示例

文中所有的查询来源于 Dataview 示例展示检索文章结构; dataview LIST FROM type/books WHERE author = "Conrad C" dataview LIST author FROM type/books dataview LIST WITHOUT ID source FROM "10 Example Data/food" WHERE source dataview LIST rows.file.link FROM "10 Example Data/books"

Huajin

Huajin

Pkmer

Thino 基于多文件保存的同步方案优化

对比三个Memos类应用,使用多文件存储改善Thino的同步体验

2024 年我接触的 Memos 类应用有三个,usememos,Flomo 和 Thino,代表了三个 Memos 的方向。我从代表性功能,使用条件和缺点几个方面进行评价。 Flomo 起源于两位个人开发者的设计,我认为是目前开发最完善的 Memos 类应用了,标签管理和桌面便签功能狠狠切中我的痛点。支持微信输入,一些忽然的短暂的想法和文字可以通过微信来即时同步,会员年费 99 真的不贵。但缺点是作为一个软件太独立了,进行周期性归纳总结的时候需要手动切换和同步的体验着实不太好。 Usememos](https://www.usememos

BabyXin

BabyXin

Pkmer

Dataview 语法实战 - 如何把一列内容拆到两列

把某一行中的某列内容拆分成两列,更方便展示

用个例子解释下我们想要做什么 统计所有标题『学习』下的无序列表,并且按照标签分列 image.png 上图中我们有以上两个文件,他们都有标题『学习』以及一些带标签的无序列表。我们需要得到以下的 dv 检索结果 image.png 分别把带有数学标签和语文标签的拆分成两列,且维持依旧在同一行。 结果如下 dataview table without id rows.file.link[0] as 日期, filter(rows, (x) =contains(x.L.tags,"数学")).L.text as "数学

Huajin

Huajin

Pkmer

Dataview 实战 - 展示笔记总数

Dataview实战-展示笔记总数

安装 Dataview 插件后,可以用非常简单的语句展示笔记总数,不需要使用 JavaScript。 dataview list without id length(rows) group by 12345 上面的语句没有对数据来源进行选择,直接查询了整个笔记库。使用 group by 对结果进行分组,这里只是为了将数据整体变成一个组,所以随便填写了 12345。length(rows) 得到组中的总数,without id 用于去掉无用内容。此时的数字便是库中笔记总数(不包含特殊类型的文件)。 可以对语句进行一些加工,以标注的形式展现在笔

tk

tk

Pkmer

Obsidian 样式:可滚动的 Dataview 查询结果

除了 limit,你还可以这样限制 dataview 的输出结果

当你使用 Dataview 检索时,如果查询结果过多,但是我们又不想用 limit 来限制获取的结果时,可以试试用下面这段 css。它可以把 dataview 查询结果的长度限制在一定长度,超出这个长度就会出现滚动条,以滚动的方式浏览下面的结果。 效果如图: Pasted image 20231008183416.png 代码中的两个 400 px 代表把 dataview 和 dvjs 的查询结果的高度限制为 400px,如果觉得尺寸不合适可以自行修改。 添加 CSS 可以参考这篇:Obsidian的CSS代码片段

Huajin

Huajin

Pkmer

Dataview 实战 - 查找重名文件

利用dv查找库中的重名文件

image.png

calmwaves

calmwaves

Pkmer

Dataview 支持的表达式 Expression

基本语法学习指南,表达式 Expression

在表达式中,你可以使用的有 除了查询类型和操作符以外的所有内容,都是表达式 有那么几种表达式: 1 (数字) true/false (布尔值) "text" (文本) date(2021-04-18) (日期) dur(1 day) (定长时间) Link (链接) [1, 2, 3] (列表) { a: 1, b: 2 } (对象

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 中的查询字段可以是什么

基本语法学习指南,Field 查询字段

Dataview 的查询字段 Field 就是我们最后想要显示的内容组成的列表,可以是以下几种 dataview table date(now); dataview table file.name limit 10 dataview table date(now) - file.ctime limit 10 dataview table round((date(now) - file.ctime).day) AS "已经创建了(天)" sort file.ctime limit 10 查询字段示例1

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 提供的四种查询类型

基本语法学习指南,Dataview 提供的四种查询类型详细解释

Dataview 提供了四种内置查询类型: 下面给出四种查询类型的简单使用方法,以及进阶使用的相关示例链接 LIST 查询时,会将结果组成一个无序列表,包含文件链接或组名 (如果决定分组)。除了文件信息外,最多还可以指定一个要输出的附加信息。 如果只有一个简单的 LIST 而没有其他的约束条件,他就会把库中的所有的文件以列表的形式展现出来(只有 Query Types 且不包含其他任何信息的时候,需要在结尾加一个空格); dataview LIST 结果: image-20230708173203486

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 支持的四种查询方式

基本语法学习指南,代码结构

Dataview 一共提供了四种查询的方式,后两者涉及到 JavaScript ,不在 Dataview 基础语法中介绍 查询方式 介绍 :--::-: DQL 行内查询 可以直接插入文章中,像 excel 中使用函数那样,可以实现级联,缺点是功能不完整 DQL 代码块查询 Dataview 用的最多的查询方式 DVJS 行内查询 和 DQL 行内查询类似,但是功能更多,但是需要用 javascript DVJS 代码块查询 可以满足大部分要求 行内 DQL 需要写在行内代码中,适合小范围嵌入元数据使用;

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

一个 Dataview 查询示例

Dataview 基本语法学习指南

我们以这个例子走进 Dataview 查找最近三天创建的文件,并且让最新的文件放在前面; dataview Table file.ctime as "创建日期" Where date(today) - file.ctime <= dur(3 day) Sort file.ctime desc 效果如图 cover 我们拆解一下这段查询语句 一个 Dataview 查询示例 把上面的语句换成中文就是:把满足今天的日期减去创建文件的日期小于等于三天的文件,按照倒序排列,以表格的形式展示满足条件的文件的创建日期。 只用三行代码,就

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 任务查询示例

dataview TASK FROM "10 Example Data/assignments" dataview TASK FROM next dataview TASK FROM clientC OR clientB dataview TASK FROM "10 Example Data/assignments" OR "10 Example Data/games" dataview TASK FROM "10 Example Data/assignments" AND later

Huajin

Huajin

Pkmer

Dataview 列表简单查询示例

Dataview 列表简单查询示例

dataview LIST FROM "10 Example Data/games" dataview LIST FROM "10 Example Data/books" OR "10 Example Data/games" dataview LIST FROM type/books dataview LIST FROM dvjs/el OR dv/min dataview LIST FROM "10 Example Data/games" AND genre/action datavi

Huajin

Huajin

Pkmer

Dataview 的 GROUP BY 究竟是怎么工作的

Dataview 的 GROUP BY 究竟是怎么工作的

分组时,结果的 “第一层” 会发生变化。 在不分组的情况下,第一级是从 from/WHERE 语句返回的文件链接,因此如果你没有向 LIST 或 TABLE 命令提供额外信息(例如 wihout id),它们将自动显示。文件链接是结果的 ID。 分组之后,成组条件将成为第一级,即 ID。这意味着无需添加任何额外信息就可以在列表或表中看到组名,而不是文件链接。要仍然看到文件名,您需要将它们作为附加信息传递给每个 row.file.link。

Huajin

Huajin

Pkmer

Dataview 表格简单查询示例

Dataview 表格简单查询示例

dataview TABLE FROM "10 Example Data/games" dataview TABLE FROM type/books dataview TABLE FROM dvjs/el OR dv/min dataview TABLE FROM "10 Example Data/books" OR "10 Example Data/games" dataview TABLE FROM "10 Example Data/games" AND genre/action d

Huajin

Huajin

Pkmer

Dataview 示例展示检索文章结构

本文为辅助文章,辅助其余Dataview查询示例文件

讲讲为什么需要有这么一篇辅助文章。Dataview 示例展示中的所有文章均基于 Github 上的这个项目:dataview example vault](https://github.com/s-blu/obsidiandataviewexamplevault),这个英文示例库是一个完整的 obsidian 的 vault(不想直接去 Github 下载原库也可以在 [这里 查看,缺点就是所有的 dataview 查询都只能看到代码没法看到真正的查询结果),原库中包含了四个部分 Dataview 示例展示检索文章结构 本文主要就

Huajin

Huajin

Pkmer

Dataview 语法实战:自定义排序进阶操作实例

Dataveiw 自定义排序进阶操作

在 Dataview语法实战-自定义排序的简单实例 中,我们已经实现了自定义排序的功能,但是当自定义的量大的时候,需要嵌套的 choice() 函数就会很多。此时我们就需要利用另一个函数 default() 和 24 - 表达式lambda 表达式 dataview TABLE recipe-type FROM "10 Example Data/food" WHERE recipe-type SORT default(((x) ={ "vegetarian":1, "meat":2, "onepot": 3 }[x])(recipe-ty

Dataview 语法实战 - 列出特定标题下的元素

列出特定标题下的元素

如果你的同一类型的笔记都以相同的格式书写,每篇笔记都存在相同的一个标题,那么你就可以统计所有相同标题之下的所有列表。当然也可以为这些列表添加限制条件,比如筛选包含了某个 tag 的列表,又或者是列表的某个 Metadata 为特定值。 更具体的例子,比如你的所有日记,可能你时不时会摘录一些语句放到日记的 摘录 标题之下。有一天,你想列出你摘录的所有语句,你就可以用本文的方法。又或者,你设置了所有 obsidian-memosMemos 都存储在 Memos 标题下,你想在某一篇笔记中汇集你的所有 Memos,也可以用本文的方法。

Huajin

Huajin

Pkmer

Dataview 日历简单查询示例

dataview CALENDAR file.day FROM "10 Example Data/dailys" dataview CALENDAR file.day FROM daily dataview CALENDAR file.day FROM "10 Example Data/dailys" OR journal dataview CALENDAR file.ctime

Huajin

Huajin

Pkmer

Dataview 实战 - 进度条

用进度条展示你的读书笔记进度和任务完成进度

试试把下面这段 html 粘贴到你的 obsidian 库中,你应该能够看到一个进度条 给定两个元数据,可以放在 Properties 属性区域,也可以是行内字段,这里以行内字段举例 把这两行粘贴到你的笔记中,你就为你的笔记添加了两个元数据。(详见 11 - 添加元数据至文件) 你想在这本书的读书笔记这一页中自动计算并且展示你的阅读进度,你可以直接把他们相除并且转换成小数展示。 如果觉得只看数字不够直观,可以试试用进度条,我们也可以用字符串的拼接拼出上面讲到的 HTML 的进度条的代码格式 你读了很多本书

Huajin

Huajin

Pkmer

每日字数的热力图

自动统计每日字数并生成热力图

Pasted image 20231019151826 仅在 win10 下测试 上图是 win10 Blue Topaz 主题 深色模式下 的效果,根据字数多少显示不同的颜色,鼠标悬浮到某个点会弹窗当天的日期和字数 由于 echarts 插件不能在 Android 上使用,因此 Android 上不能查看本文的热力图 1. better-word-count 2. obsidian-echarts 3. dataview 安装并打开这三个插件。 在 better word count 插件设置里打开【Collect Stati

calmwaves

calmwaves

Pkmer

Dataview 实战 - 将一周的元数据显示为 emojis(习惯跟踪)

将一周的元数据显示为emjois(习惯跟踪)

利用 dataview 提供的 choice 函数,我们可以把输出值修改为 emoji,使得表格更加直观,下面给了两种使用示例,可以参考这两段代码的使用方式以及结果构建属于自己的 dataview 查询语句。 dataview TABLE choice(praying, "💚", "➖") AS Praying, choice(breathing, "💚", "➖") AS breathing, choice(beingthankful, "💚", "➖") AS "being thankful",

Huajin

Huajin

Pkmer

Dataview 实战 - 如何查询结果的数目

如何查询结果的数目

在 Dataview 中,我们可以利用 GROUP BY 来把结果聚合起来,然后利用 length() 函数即可求出结果的数目。 例如,检索不同作者的书的数目 dataview TABLE rows.file.link, length(rows) FROM "book" GROUP BY 作者 image.png700

Huajin

Huajin

Pkmer

Dataview 实战 - 列出不存在的链接页面

列出不存在的链接页面

不存在的链接就是你直接在某一篇笔记中直接敲 ...,然后输入一个不存在的路径。对于文件来说,这些链接是文件的外链,也就是 file.outlinks,我们可以直接判断是否非空即可得到 dataview TABLE WITHOUT ID key AS "unresolved link", rows.file.link AS "referencing file" FROM "......" FLATTEN file.outlinks as outlinks WHERE !(outlinks.file) AND !(contains(meta(

Huajin

Huajin

Pkmer

Dataview 实战 - 列出以某个字母开头的文件或元数据

列出以某个字母开头的文件或元数据

对于文件名,我们只需要判断 file.name 即可,注意用方括号索引,索引从 0 开始(0 才是第一个字符) dataview LIST FROM "10 Example Data" WHERE file.name[0] = "A" 同理,如果判断元数据以某个字符开头,就把其中的 file.name 改成对应的元数据即可

Huajin

Huajin

Pkmer

Dataview 实战 - 列出每年的某个月份的检索结果应该怎么写

列出每年的某个月份的检索结果

提供两种方式,例如检索每年的生日是 2.17,取每年这个时候写的笔记 dataview LIST file.lists.text WHERE file.day.month = 2 and file.day.day = 17 或者 dataview LIST file.lists.text WHERE dateformat(file.day, "MM-dd") = "02-17"

Huajin

Huajin

Pkmer

Dataview 实战 - 获取未完成的任务

获取最新打开的任务

事先说明,只有 - [x] 才会被视为任务完成,除此之外都被视作未完成,例如 - [ ],以及其他自定义的状态 - [o]、- [y]、- [!]。因此,如果我们用下面这段代码,也许得到的并不是你想要的,他不能筛选掉其他自定义状态的任务。 dataview TASK FROM "10 Example Data/dailys" WHERE !completed SORT file.day DESC LIMIT 10 我们需要利用任务的一个 14 - 隐式字段隐式字段 status 进行更精确的检索,代码如下: dataview TASK FR

Huajin

Huajin

Pkmer

Dataview 实战 - 获取前后的日记链接(不一定是昨天)

获取前一天或者后一天的笔记的链接(不一定是相邻的两天)

在日记中也许你会放上一个到前一天的链接,考虑到不一定是每天都写日记,前一天不一定是昨天,因此这个操作当然可以手动完成,但是如果你想要放在模板里面就不只是 day - 1 那么简单了。这里提供一份使用 dataview 的方法 dataview LIST FROM "10 Example Data/dailys" WHERE file.name != this.file.name AND file.day < this.file.day SORT file.day DESC LIMIT 1 主要逻辑就是利用日期的比较运算,找到距离本文件创建日期

Huajin

Huajin

Pkmer

Dataview实战-通过 Dataview 列出关键字所在的行和行数

列出关健字所在的行内容以及所在行数

有些时候,我们想查询一些关键字,可以用 ob 内置的查询,但是不能持久化。用 dataview 的表格就很爽!一目了然,可以放在 Hompage 或者周报内。 查询老虎 在动物标签文件中出现的行和所在行行数。 我们先创建我们用来查询的文件: tags: 动物 title: 狮子 date created: 2023年11月23日,星期四,17:01:33 date modified: 2023年11月23日,星期四,17:16:05 狮子,草原之王,壮美的鬃毛如金色火焰。狮吼震天,威武雄壮。雄狮领导着狮

我想煞了我

我想煞了我

Pkmer

Dataview 社区实践经验

Dataview社区实践经验

不必为了用 Dataview 而 Dataview,而是当你有需求的时候,再来用 Dataview。考虑到前面的语法介绍可能有的地方写的不够清晰,故打算依据 GitHub 上比较出名的 Dataview 英文示例库撰写本文,以及社区更多作者,在这里分享 Dataview 实例。旨在你有需求时,可以找到类似的实例,亦或者是在学习 Dataview 的时候,遇到不懂的地方可以直接来找已有的使用示例,希望通过具体的实例可以让你对各个函数的理解更加深刻。 Dataview 实例包含了....个实例,又按照应用的查询类型,应用的函数以及用途对他们进行了分类

Huajin

Huajin

Pkmer

如何在查询中创建自定义输出

Dataview 实战:如何在查询中创建自定义输出

我们可以借助字符串拼接来自定义输出结果,+ 为拼接符。实际上就是将字符串(文本)和元数据拼在一起,然后一起输出。 如果在输出中写到:"¥"+ 支出,你的结果前面都会加上一个 ¥。添加字符串片段的数量和位置没有限制。 比如我们可以列出所有库中的书,以及作者,并且在作者前面加个 from dataview LIST "from " + 作者 FROM type/books 再列出这些书的阅读进度 dataview LIST "from " + 作者 + " (阅读进度: " + 已读页数 + "/" + 总页数 + " 页)" FROM

Huajin

Huajin

Pkmer

Dataview 实战:用表格和列表汇总罗列与当前文件有相同元数据的文件

Dataview 实战:列出与当前字段值相同的页面,例如,查找共享配料的食谱

假设文件中包含一个元数据 配方类型::素食,列出所有具有这个元数据的文件 dataview LIST FROM "10 Example Data/food" WHERE 配方类型 = this.配方类型 如果是多值属性,例如以食材做例子,文件中有 所需食材: [...] 的多值属性,想要列出和当前文件用了相同食材的其他文件 dataview TABLE 食材 as 共同食材 FROM "10 Example Data/food" WHERE 所需食材 FLATTEN 所需食材 as 食材 WHERE contains(this.所需食材,

Huajin

Huajin

Pkmer

Dataview 实战:如何统计属性值为空的值

统计属性值为空的值

在记笔记的时候,也许会遇到有些属性我们要写完笔记才填上,例如 完成时间 等。这种情况下,这个属性值会置空。我们知道怎么检索有属性值的属性,那要怎么样才可以检索没有属性值的属性呢? 假设这个元数据是 completedDate,你可以用 来统计 completedDate 为空的 Field. 但是,如果有个 YAML 写成了空列表,此时 dataview 并不会认为他是空,例如 或者是 那么 dataview 会认为 genres 是一个空列表 (empty list),而不是空值。因此 genres=null 的结果是

Huajin

Huajin

Pkmer

Dataview 实战 - 列出包含特定文字的文件或元数据

列出包含特定文字的文件或元数据

列出以某个特定开头的文件,可以借助 startswith() 函数,例如本系列文章以 Dataview 实战 开头: dataview LIST FROM "10-Obsidian/Obsidian社区插件/Dataview" WHERE startswith(file.name, "Dataview实战") 同样,我们可以用 endswith() 函数列出以某个特定结尾的文件,如果把 file.name 替换成别的元数据,也可以列出以某个特定开头的文件。 借助 contains() 函数 dataview LIST FROM

Huajin

Huajin

Pkmer

Dataview 实战 - 在同一个表的列中显示两个元数据字段

在一个表列中显示多个元数据字段,在需要考虑重命名字段时非常有用

直接用 [] 把需要在同一列展示的内容框起来 dataview TABLE wake-up, [午睡时间, 睡觉] as "睡眠时间", [午餐时间, 晚饭时间] AS "Meal times" from "Daily/2023" where 换成你的筛选条件 如果你在每个文件中只有一个有效值存储在不同的元数据字段中,举个例子:有的文件写的是睡觉时间,有的是入眠时间,如果把他们视作同一个时间,我们就需要把他们写在一起,而不是写成上面的列表显示。这时候我们可以利用 filter 和 flatten: dataview TABLE 起床

Huajin

Huajin

Pkmer

Dataview 实战 - 如何让 Dataview 识别不同格式的日期

在 dataview 中,匹配 42 - ISO 8601ISO8601表示法 的文本将自动转换为日期对象(如果你不清楚这是什么,请看 13 - Metadata的数据类型) 但是并非所有人都按照了 dataview 所采用的 ISO8601 标准来写时间,也许有的人会写成 yyyy-MM-dd HH:ss,有的写成 09/25/2022 09:09 AM,还有的写成 22.09.2022 11:15。有很多种方式用于表示一个日期或者时间,但是 dataview 只能识别一种。但是,如果你用了其他的日期格式也不用慌,本文针对几种不同的日期格式,给

Huajin

Huajin

Pkmer

Dataview 实战:通过 Dataview 列出关键字所在的行和行数

Dataview 实战:通过 Dataview 列出关键字所在的行和行数

本段代码适用于收集的独立的知识片段和语录的查询与展示(或其他需要查询的地方),之前找了好久,好多都是展示包含标签内容的所在文件夹,并不包括笔记内容,最后在搜索引擎和 GPT 的帮助下合成此代码。 这样在收集知识片段的时候,如果暂时不知该如何给他设置文件夹分类,可以直接在文字后边加上所关联的标签。 (或者其他需要此功能的任何其他用途。) dataviewjs //使用时修改关键词即可 const term ="标签" let folderpath="限定文件夹" //更改为限定文件夹即可,留空为遍历所有笔记 const files = a

劉同學

劉同學

Pkmer

Dataview 实战:如何使用 Dataview 查询一个文件中的所有图片

使用 Dataview 查询一个文件中的所有图片

在笔记中插入图片实际上是嵌入图片的链接 所以,图片也属于笔记的链接。我们在 14 - 隐式字段 中提到了文件的一个元数据 file.outlinks,他的属性值就是文件的所有外联,嵌入的图片当然也包含在内。 因此我们可以这样写得到一个文件中的所有外链。 dataview TABLE without id file.outlinks FROM "..." 下一步:筛选代表图片的外链 dataview TABLE without id 图片 FROM "要查询的文件的路径" FLATTEN filter(file.outlinks

Huajin

Huajin

Pkmer

Dataview 如何不显示文章链接

Dataview 实战 - 如何不显示文章链接

使用 Dataview 进行汇总的时候,如果你没有使用 Group by 操作符,那么你的第一列显示的就是对应文件的链接,例如 Pasted image 20231104130812.png 这一列是每一个检索结果的 id,如果不想显示这一列,我们需要在开头写上 without id,例如

Huajin

Huajin

Pkmer

Dataview 语法实战

Dataview 语法实战,实际教学,实战

不要为了用 dataview 而用 dataview,而是要到需要用 dataview 的时候,再来用。考虑到前面的语法介绍可能有的地方写的不够清晰。故增加这一篇幅,汇总一些基础简单的语法但却能涵盖: 1. 笔记统计和分析:Dataview 可以帮助你统计和分析笔记的元数据,例如计算总的笔记数量、按标签分组并计数、按时间排序等。这对于笔记整理、知识管理和了解笔记库的内容非常有帮助。 2. 任务管理和待办事项:通过 Dataview,你可以创建一个任务管理系统,跟踪所有的待办事项和任务。你可以根据标签、日期和状态等属性筛选和排序任务,使任务

Huajin,Windysoul,PKMer Huajin,Windysoul,PKMer Huajin,Windysoul,PKMer

Huajin,Windysoul,PKMer

Pkmer

Dataview 实战:定制你的数据表格并为表格列添加个性化样式

Dataview 实战:定制你的数据表格,并为 Dataview 表格列添加个性化样式

在 22 - 查询字段 中我们提到过,当我们在查询字段中将文件的元数据和一些描述词组合时,可以为表格对应列中的每个元素添加一些特殊样式,当时只给了利用 Obsidian 提供的 Markdown 语法组成不同的样式,这里将会利用 html 提供更多的玩法 这里我们以右对齐举例,让属性 price 中的每一个值都右对齐 源码如下 dataview TABLE publisher, developer, "<span style='display:flex; justify-content: right;'>" + pri

Huajin

Huajin

Pkmer

Dataview 相关的 FAQ - 常见问题

dtaview 插件的常见问题,FAQ

不知道你在使用 Dataview 查询的过程中,是否遇到过 Dataview: Error:。Dataview 在解析你的代码过程中,如果遇到无法解析 (Parsing Failed) 的错误,就会显示一个报错信息。在报错信息中,Dataview 会用箭头为你指出无法解析的地方,并且在下放给出可能的修改提示。 🔺如果你的 dataview 代码报错,请你先考虑 然后再看看下面有没有你遇到的情况 1. 时间数据类型,月份要写成 07 而不是 7; 1. 错误示范:2023-7-24 2. 正确示范:2023-07-24 2. Exp

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

引用文档内容到行内方法

引用其他文档中的内容,加入到行内,进行显示的方法

在 obsidian 中,现在只能使用块引用,将一个文档中的一行,放到另一个文档中。而且,还只能放到新的一行,不能嵌入到行中。有时候,我们也想要引用一句话,并嵌入到行中。下面就介绍如何做。 文件名 引用原文档 显示样式为: Pasted image 20230929233509 显示结果为: Pasted image 20230929233531 源文档中,第二行会有点靠右。影响不大。但是介意的话,可以使用下面的 css 样式,进行修改。 将上面的内容放到文件(dataview 行内属性去除前后空格.css)中

宏沉一笑

宏沉一笑

Pkmer

Dataview 任务进阶查询示例

dataview TASK FROM "10 Example Data/assignments" WHERE !completed dataview TASK FROM "10 Example Data/assignments" GROUP BY file.link dataview TASK FROM "10 Example Data/assignments" WHERE contains(tags, "later") dataview TASK FROM "10 Example Data/assignments

Huajin

Huajin

Pkmer

Dataview 语法实战:自定义排序的简单实例

在 Dataveiw 中简单的自定义排序

SORT 有排序的意思,既然是排序,我们就需要指定是依据什么字段排序。dataview 提供了两个关键字 ASC 和 DESC 来选择结果是从小到大排序还是从大到小排序。但是,我们能不能自定义一种排序方式呢? Dataview语法实战-自定义排序的简单实例 如果我们直接列出所有的食谱以及食谱类型,我们会得到这么一个结果 dataview TABLE recipe-type FROM "10 Example Data/food" WHERE recipe-type Dataview语法实战-自定义排序的简单实例 是不是有点混乱,

Huajin

Huajin

Pkmer

Dataveiw 的 GROUP BY 操作符进阶示例

这个问题我们在 Dataview语法实战-FLATTEN操作符进阶示例3. 配合函数使用FLATTEN 操作符进阶示例 里面站在 FLATTEN 的角度详细讲过了,这里就站在 GROUP BY 的角度再讲一次。 拿上面那些书本来举例,书的主题属性是数组。考虑这么一个情形:书 A 的主题属性有 a, b 两个值,书 B 的属性只有 a 这个值。那么对书的主题这个属性作 GROUP BY 会有什么结果呢。答案是他们会各自为一组。因为 GROUP BY 成组的条件是必须严格相等,也就是数组中的每个元素都要相等。 Dataview语法实战-GROU

Huajin

Huajin

Pkmer

Dataveiw 的 GROUP BY 操作符简单示例

Dataveiw 的 GROUP BY 操作符简单示例

GROUP BY 翻译成正文就是按照什么分组。不知道你在使用 GROUP BY 操作符的时候,有没有遇到成组后其他列都消失的情况。这是因为,我们原本使用了 FROM 和 WHERE 操作符之后得到的结果是以文件为单位的。再使用了 GROUP BY 操作符之后,我们的单位就会变成一由同类属性组成的一个个集合了。 所有的书都放在了 "10 Example Data/books" 文件夹下,因此可以用以下代码列出所有记录的书籍的作者 dataview LIST FROM "10 Example Data/books" GROUP BY au

Huajin

Huajin

Pkmer

Dataview 语法实战:FLATTEN 操作符入门示例

Dataview 查询中的一些 FLATTEN 操作符的使用实例

FLATTEN 是 GROUP BY 的反义词,它的作用是把数组拆分成单个值,每个值单独成行。例如你的查询结果中有一项包含一个七个值的数组,你就会得到七行,每行为原数组中的一个值。 使用前 Dataview语法实战-FLATTEN操作符入门示例525 使用后 Dataview语法实战-FLATTEN操作符入门示例525 Dataview语法实战-FLATTEN操作符入门示例500 所有的书都放在了 "10 Example Data/books" 文件夹下,因此如果要检索所有这些文件,并且展示所有书的类型,我们就可以用下

Huajin

Huajin

Pkmer

Obsidian 样式:DataView 在 table 视图下标签出现错位断裂的修复

DataView 在 table 视图下标签出现错位断裂的修复

直接激活 修复标签换行问题,取消标签块前的无序列表标志 1. div.block-language-dataview.node-insert-event table td ul 这一选择器表示选择 DataView 表格 - 表格体中无序列表部分 2. list-style: none 表示列表样式,使用 none 则无额外标志 3. flex-direction: row-reverse 表示倒序序列排序 1. .tag 为类 [^1] 选择器,即所有标记为

darkluna999

darkluna999

Pkmer

Dataview 实战:Obsidian dataview 引用本地图片

dataview引用本地图片

事情是这样的:前两天我用 douban 插件抓取 Reading 页面书籍封面的时候遇到了无法抓取的问题。我的 yaml 引用图片直接是引用的豆瓣的网络图片,见下图 cover:字段: 内文yaml 明明豆瓣链接已经抓取到,但是出现了以下图片无法显示的情况(mac 端和 pc 端都是这种情况) 内文callout无图片 所以我判断有可能是插件的问题,还有一种最大的可能是豆瓣网站做了站外防盗链措施,我通过浏览器进入抓取的图片网址也无法显示图片,这证明有可能就是豆瓣不定期抽风的问题。 我也联系了 obsidian douban 插件的作者

奇货队长

奇货队长

Pkmer

Dataview 实战:基于 Dataview 提取并展示笔记脚注

基于 Dataview 提取并展示笔记脚注

image.png 如图,左侧是一个包含 Dataview 查询的笔记,另外右侧两个笔记是需要查询的笔记,这俩笔记包含脚注。 此查询脚本会找到脚注部分,并以列表的形式展现。 js const pages = dv.pages('"test/footnote"') async function getFileFootNote(filepath){ const path = app.vault.getAbstractFileByPath(filepath) const content = await app.vault.cached

windilycloud

windilycloud

Pkmer

Dataview 实战:发挥元数据的魔力:掌握 Dataview 的四大查询类型

Dataview 的四大查询类型实例

在 Obsidian 的世界中,元数据是无尽的宝藏,而 Dataview 插件则是开启这个宝藏的魔法钥匙。不同于简单的笔记,Dataview 插件为你提供了四种强大的查询类型:表格、列表、任务和日历。让我们一起看看这些查询类型在实际应用中是如何释放出其魔力的。 无论是整理项目进展、笔记内容还是任务计划,Table 查询都能以表格的形式清晰地展现信息。假设你正在撰写一篇文章,想要整理各个观点的优劣。通过 Table 查询,你可以将不同观点、支持论据和反对论据整理成一张表格,一目了然地比较它们的利弊,助你更有条理地构建文章框架。 如果你

Huajin

Huajin

Pkmer

Dataview添加某一主题笔记列表——dv表格用法

如果一篇笔记有多个主题,如何用表格仅列出和其中某一个主题相同的笔记,并列出所属主题及创建日期?对于具有多个主题的笔记,如何只列出其中一个主题的笔记?

对于具有多个相关主题的笔记,仅列出包含其中一个主题的笔记名列表和笔记所属的主题,以及创建日期 假定你正在阅读的这一篇笔记是有关跑步主题的笔记,同时还具有健康、主题和 O321 - Dataview 系列共计四个相关主题. 使用本文提供的代码,就可以将对于这样的具有多个相关主题的笔记,用表格的方式列出只包含跑步主题的笔记,将当前笔记中其它三个主题排除在外,同时把笔记的主题以及创建日期列出来. 仅列出主题包含跑步的笔记 尽管当前笔记有主题:跑步, 健康, 主题, O321 - Dataview 系列,下面的结果中还是排除了有关健康,主题

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview添加相同主题笔记列表——完全相同主题

增加具有完全同样主题的笔记列表

可以在正在阅读的一篇笔记下方,将具有和正在阅读的笔记具有相同完全相同主题的笔记全部罗列出来,方便我们快速对具有相同完全相同主题的笔记进行查看 列出和当前笔记具有完全相同主题的笔记列表,查询代码如下 dataview LIST FROM "ExampleNotes/主题相关" where 主题 = this.主题 and file.name != this.file.name 结果如图 Pasted image 20230731131745

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview添加某一主题笔记列表——进阶用法

如果一篇笔记有多个主题,如何仅列出和其中某一个主题相同的笔记?对于具有多个主题的笔记,如何只列出其中一个主题的笔记?

假定你正在阅读的这一篇笔记是有关跑步主题的笔记,同时还具有健康, 主题, O321 - Dataview 系列共计四个相关主题 对于这样的具有多个相关主题的笔记,如何只列出其中跑步一个主题的笔记,将其它三个主题排除在外,同时把笔记的主题也列出来呢? 如果仍然使用 添加某一主题笔记列表--基本用法^63bf7a在笔记底部添加某一主题笔记列表——基本用法 中的代码 dataview LIST FROM !"O321-Dataview" FLATTEN 主题 as flattenedTopics WHERE contains(flatten

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview 支持的Data Commands 操作符

基本语法学习指南,Data Commands 操作符,FROM,WHERE,SORT,FLATTEN,LIMIT,GROUP BY

FROM <source> 语句用于决定你所有结果的来源,这些来源可以是: - 收集所有引用了文件 A 的文件,语法为 FROM A - 收集文件 A 中引用了的文件,语法为 FROM outgoing(A) dataview Table From "PKMER/Dataview" dataview Table From "PKMER/Dataview" and !"PKMER/Dataview/00-MOC 目录" dataview Table From ... d

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 支持的Literals 字面常量

基本语法学习指南,Literals 字面常量

Dataview 中可以使用的字面常量有三种 给出了一些一般字面常量的例子,可以自己根据示例在查询中选择合适的字面常量; 字面常量 Literal解释 Description :-::-: 0数字 0 1337正数 1337 -200负数 -200 "The quick brown fox jumps over the lazy dog."用了 26 个字母的字符串 链接链接 指向本文的链接 [1, 2, 3]1, 2, 3 组成的列表 1, 2], [3, 4[1, 2] 和 [3, 4] 组成的列表 { a: 1. b

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview 中的Metadata 元数据

Dataview 基本语法学习指南,元数据

或许你在其他地方也听过 Metadata 这个概念,它的适用范围远远不止于 Dataview 这个插件。 解释一下这段话:元数据是关于数据的数据,第一个『数据』指的是对象,在 obsidian 中一般就是指一个文件,也就是我们查找的最小单位(除了 task)。第二个『数据』是数据的数据,也就是前一个数据的某个信息,也就是文件的信息 (属性),比如说文件的标题,文件的创建日期等。 一个元属性包含两个部分:Key 和 Value(其实就是一个键值对),假如 Key 是 name,对应的 Value 就是具体的名字。假如 key 是 age,对

Huajin,PKMer Huajin,PKMer

Huajin,PKMer

Pkmer

Dataview添加相同主题笔记列表——进阶用法

增加具有同样主题的笔记列表,使用主题对笔记进行关联管理,增加具有同样主题的笔记列表,并列出所属主题。

添加相同主题笔记列表--基本用法 仅列出了笔记名,通过本篇笔记提供的代码,可以在正在阅读的一篇笔记下方,将具有和正在阅读的笔记具有相同主题的笔记全部罗列出来的同时,将笔记的主题也列出来。 查询代码 dataview LIST without id file.link + join(","+"笔记主题:"+" "+主题+"") FROM !"O321-Dataview" FLATTEN 主题 as flattenedTopics WHERE contains(this.主题, flattenedTopics) AND file.name

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview添加相同主题笔记列表--列表用法

增加具有同样主题的笔记列表,使用主题对笔记进行关联管理。

通过本篇笔记提供的实例代码,将具有和正在阅读的笔记具有相同主题的笔记全部罗列出来,方便我们快速对具有相同主题的笔记进行查看 相同主题笔记列表查询代码 dataview LIST FLATTEN 主题 as flattenedTopics WHERE contains(this.主题, flattenedTopics) 可以看到,图示中的笔记是关于健康主题的一篇笔记,在笔记的下方,列出了库中 5 篇同样具有健康主题的笔记 Pasted image 20230621205105

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview添加相同主题笔记列表——dv表格用法

用表格为笔记增加具有同样主题的笔记列表,并列出所属主题及创建时间。使用主题对笔记进行关联管理

通过本篇笔记提供的实例代码,可以用表格的形势,将具有和正在阅读的笔记具有相同主题的笔记全部罗列出来的同时,将笔记的主题也列出来。 笔记底部相同主题笔记列表查询代码 dataview TABLE without id file.link, 主题, dateformat(createdDate, "DD") as "创建日期" FROM !"O321-Dataview" FLATTEN 主题 as flattenedTopics WHERE contains(this.主题, flattenedTopics) AND file.name

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview添加某一主题笔记列表——列表用法

如果一篇笔记有多个主题,如何仅列出和其中某一个主题相同的笔记?对于具有多个主题的笔记,如何只列出其中一个主题的笔记?

添加某一主题笔记列表——列表用法 对于具有多个主题的笔记,只列出包含其中一个主题的笔记 假定你正在阅读的这一篇笔记是有关跑步主题的笔记,同时还具有健康、主题和 O321 - Dataview 系列共计四个主题。对于这样的具有多个相关主题的笔记,如何只列出其中跑步一个主题的笔记,将其它三个主题排除在外呢? 如果使用如下代码 dataview LIST FROM !"O321-Dataview" FLATTEN 主题 as flattenedTopics WHERE contains(this.主题, flattenedTopics) AN

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview汇集主题——关于笔记的创建日期和主题的汇集

基于 Dataview 提取并展示笔记脚注

在你的 Obsidian 库中,一定会有一些笔记是有关某一主题的笔记,也一定会有某一篇笔记会涉及到多个相关主题。无论你把这些笔记保存在一个文件夹或与其主题相关的多个文件夹内,如果想在新的一篇笔记中将笔记按照笔记创建月份分组及特定主题进行汇集,就可以用本篇笔记中的代码来实现。 提供几种关于笔记的主题和创建日期汇集文件的示例 将笔记根据主题分组并以列表形式展示 dataview table rows.file.link as 笔记, dateformat(rows.createdDate,"yyyy-MM-dd") a

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer

Dataview添加相同主题笔记列表——指定月份

增加具有同样主题且指定月份的笔记列表

将具有和正在阅读的笔记具有相同主题且在指定月份创建的笔记全部罗列出来,方便我们快速对具有相同主题且在指定月份创建的笔记进行查看 列出相同月份创建的相同主题笔记列表查询代码如下 dataview LIST without id file.link + join(","+"笔记主题:"+" "+主题+"") FROM "ExampleNotes/主题相关" FLATTEN 主题 as flattenedTopics WHERE contains(this.主题, flattenedTopics) AND file.name != this.

Windysoul,PKMer Windysoul,PKMer

Windysoul,PKMer

Pkmer