Obsidian插件:DataView

Structure of a Query

<QUERY-TYPE> <fields> 
FROM <source>
<DATA-COMMAND> <expression>
<DATA-COMMAND> <expression> ...

Query-Type fields

Query-Type 包括:

  • LIST 单个列(列即field)
  • TABLE 多个列
  • TASK 类似list单列查询
  • CALENDAR A calendar view displaying each hit

fields 类似 SQL的查询列(Column),常用的fields:

  • file.xx

file支持的属性: https://blacksmithgu.github.io/obsidian-dataview/annotation/metadata-pages/

  • file.name
  • file.mtime
  • file.tasks
  • file.lists

file还包括两个特殊的属性, list 和 task,这里指的是文件内容里,使用 gfm 的 list & todo语法格式的行,而不是“QUERY-TYPE”的 LIST 和 TASK

所以查询的 fields也支持 :

  • file.lists.text
  • file.task.text
  • 但是似乎没有 file.line 这种…

举例:

// 原文 * this's list1 [status:: todo]
// 查询全部的list中包含'status:: todo'的行

TABLE L.text AS "My lists"
FLATTEN file.lists AS L
WHERE contains(L.status, "todo")

file.list 和 task 还支持更多的查询属性 : Metadata on Tasks and Lists - Dataview

FROM source

FROM后可以是 文件夹 or Tag,
例子:Combining sources

LIST
FROM "Projects" AND (#project/active OR #project/soon)

DATA-COMMAND

Data Commands - Dataview
包括 FROM、WHERE、SORT、GROUP BY、FLATTEN

自定义metadata

https://blacksmithgu.github.io/obsidian-dataview/annotation/add-metadata/

自定义mate支持两种方式:

  • Frontmatter 里定义kv对
  • Inline 的方式定义kv对

举例1:原文 TODO:: 买机票 定义了kv对,key即‘TODO’,val即‘买机票’,如果要查询出全部的TODO,语句如下:

TABLE TODO
where TODO

举例2:原文如下

I would rate this a [rating:: 9]! It was [mood:: acceptable].

- [ ] Send an mail to David about the deadline [due:: 2022-04-05].

查询:

task from #projects/active
sort rating desc
where mood = "acceptable"

笔记中使用 Dataview Friendly 的标识

方案1,使用自定义meta kv:

@todo1:: 这是一个todo
@doubt1:: 这是一个疑问

方案2,使用标签:

#inbox/todo 
#inbox/done
#project/active
#project/closed