Dataview的初次学习

一个很简单的例子

list from "" where contains(file.name,"教程")

详细介绍

目的不是花哨,而是精简的整合自己的笔记,方便查找和翻阅。

代码块开头都省略了dataview提示词

我参考的教程:

obsidian插件之dataview入门 - 经验分享 - Obsidian 中文论坛

效率办公-Obsidain插件之DataView-高效信息动态查询插件 - 哔哩哔哩 (bilibili.com)

Dataview 是一个覆盖OB知识库的实时索引和查询引擎。可以将数据(如标签、日期、代码段、数字等)与笔记相关联,然后查询(如筛选、排序、转换)数据。用一种数据库处理的形式,通过查找字段并筛选,进而使用列表、表格的形式展现出来,也支持JavaScript的高级查询形式。

在文中添加属性的方法

在属性后面加两个英文冒号+一个空格。如何隐藏前面的test属性?加上一对英文括号
test1:: 文中测试属性1
(test2:: 文中测试属性2)

两种代码格式

dataview
dataviewjs,支持JavaScript代码,但我不会写

四种视图:

list 列表,table 表格,task ,calendar 日历

使用语法

TABLE|LIST|TASK(展现形式)   <field> [AS "显示列名"],..., <field> (显示字段)

FROM <source> (like #tag or "folder")  (查询地址) 可以根据标签筛选 或者是文件夹

WHERE <expression> (like 'field = value')、contains(tags,"ob/ob插件")  (查询条件) 筛选条件

SORT <expression> [ASC/DESC] (like 'field ASC')  (排序 asc升序,desc降序)

...other data commands  (其他命令,如limit,group by等)

设置字段解释意义必要性
list创建列表,同table、task必要
from检索范围,从哪个文件夹(双引号后面),or标签(写在#后面)不必要
where聚合条件,contains(file.name,“文件名”)不必要
sort排序条件,根据什么排序 sort file.ctime不必要

以上解释希望你看懂了。举一个简单的例子:

dataview list from "" where contains(file.name,"习惯")

  • list:你创建了一个列表/清单。
  • from:留空就是不筛选文件夹和标签,从所有笔记文件去找。
  • where条件:匹配(contains)了文件名(file.name)中包含“习惯”两个字的笔记
    如果你需要排序,就写sort,不需要,留空就可以。

你应该发现了file.namefile.ctime的写法,没错,这是dataview内置的。下面是dataview官网中描述的支持的元数据,都可以供搜索和排序语法使用。在后面将要说到的创建table,还可以作为列显示。

Dataview自动为每个页面添加了大量的元数据:

  • file.name 文件标题(字符串)
  • file.folder 该文件所属文件夹的路径
  • file.path 完整的文件路径(字符串)
  • file.link 文件的链接(连接)
  • file.size 文件的大小,以字节为单位,是一个数字
  • file.ctime 文件创建的日期(日期+时间)
  • file.cday 文件创建的日期(只是一个日期)
  • file.mtime 文件上次修改的日期(日期+时间)
  • file.mday 文件上次修改的日期(只是一个日期)
  • file.tags 笔记中所有标签的数组,子标签按每个级别细分,因此,#Tag/1/A 将存储在数组中,作为[#Tag, #Tag/1, #Tag/1/A]
  • file.etags
  • file.inlinks 指向此文件的所有传入链接的数组
  • file.outlinks 此文件所有的出站链接的数组
  • file.aliases 注释的所有别名数组

场景:假设,你有几篇笔记,打了同一个标签,比如#时间管理。现在你想要把时间管理标签下的笔记形成一个目录。

还记得上面的4个关键设置字段吗?from是检索范围,既可以从文件夹,又可以从标签。
dataview list from #时间管理
不需要排序的话,代码就是这么简单。

List查询

代码块开头都省略了dataview提示词

list "笔记名" + file.name +file.size
from ""
where contains(tags,"学术概念")
sort file.name

table查询

注意: table 中的表头定义的字段结尾要写英文逗号

table
  (file.mtime + dur(1 day)) as "最后编辑时间",
  file.size as "文件大小",
  class as "分类",
  file.ctime as "创建时间",
  tags
from #学术概念 
sort file.size desc

task查询

task
from ""
where !completed
group by file.ctime

查询未完成的,按照最后编辑时间分组

calender查询

calendar file.ctime from ""

进阶关键查询命令

from

  • 标签 from #论文阅读
  • 文件夹 从文件夹(和子文件夹) from “floder”
  • 链接 要获取连接到note的所有页面,
from [[note]] 
  • 链接 获取连接FROM note的所有页面(即该文件中的所有链接
from outgoing([[note]])

也可以用一些 and 和 or 联合查询。
例如返回文件夹和标签中的所有页面#tag and "folder"
[[food]] or [[note]]将会给出任何链接到[[food]]or [[note]]的页面
也可以使用否定来获取与源不匹配的任何内容 -
-#tag
#tag and -"folder"仅包含tag标记的文件,并且这些文件不再"folder"中

where
筛选字段上的页面,只有句子计算结果为true的页面才会生成

sort
按照一个或者多个字段对所有结果进行排序
sort date [asc/desc]
还可以提供多个字段作为排序依据,即如果发生凭据就用第二个字段将并列字段进行排列,以此类推
sort field1 [ASC/DESC] , ... , fieldn [ASC/DESC]

GROUP BY
对字段上的所有结果进行分组,每个唯一字段值生成一行,该值具有两个属性:

  • 对应于要分组的字段
  • 数组字段包含所有匹配的页面
    这个语法还没用过,具体用法还要查一下别的资料

flatten
在每行中展平数组,在数组中的每个条目生成一个结果行。
flatten field flatten (computed_field) as name
举例:将每个文献注释中的字段合为每位作者authors一行
table authors from #literatureNote flatten authors

limit
将结果限制为最多N个值
举例:
limit 5 sort date asc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值