菜单

#obsidian #插件 #主题研究

基本信息

原始卡片::[[dataview-dataview]] 卡片盒
需求::快速查询和聚类笔记,形成自己的数据库

  • 在正文中可以用::: 两个冒号进行属性的赋值
  • 正文中增加: `= this.file.name` 就可以直接使用daview查询语句
  • 注释代码: //
  • 帮助文档::Data Annotation - Dataview
  • without id 隐藏第一列
  • 发布的话,不能发布内容,只能发布代码出去
  • limit 100 来限制输出的内容
  • 基本语法如下:
[list|table|task] field1, (field2 + field3) as myfield, ..., fieldN
from #tag or "folder" or [[link]] or outgoing([[link]]) 
where field [>|>=|<|<=|=|&|'|'] [field2|literal value] (and field2 ...) (or field3...)
sort field [ascending|descending|asc|desc] (ascending is implied if not provided)

2 名人案例

3 元数据

3.1 文件

dataview能自动的对每个页面添加大量的元数据。

  • file.name: 该文件标题(字符串)。
  • file.folder: 该文件所在的文件夹的路径(字符串)。
  • file.path: 该文件的完整路径(字符串)。
  • file.link: 该文件的一个链接(链接)。
  • file.size: 该文件的大小(bytes)(数字)
  • file.ctime: 该文件的创建日期(日期和时间)。
  • file.cday: 该文件的创建日期(仅日期)。
  • file.mtime: 该文件最后编辑日期(日期和时间)。
  • file.mday: 该文件最后编辑日期(仅日期)。
  • file.tags: 笔记中所有标签组成的数组。子标签按每个级别进行细分,所以#Tag/1/A将会在数组中储存为[#Tag, #Tag/1, #Tag/1/A]
  • file.etags: 笔记中所有显式标签组成的数组;不同于file.tags,不包含子标签。
  • file.outlinks: 该文件所有外链(outgoing link)组成的数组。
  • file.aliases: 笔记中所有别名组成的数组。
  • without id:不显示默认的链接
  • 如果文件的标题内有一个日期(格式为yyyy-mm-dd或yyyymmdd),或者有一个Date字段/inline字段,它也有以下属性:
  • file.day: 一个该文件的隐含日期。

3.2 任务

As with pages, Dataview adds a number of implicit fields to each task: 与页面一样,Dataview为每个任务添加了一些隐式字段:

tasks inherit all fields from their parent page - so if you have a rating field in your page, you can also access it on your task.
任务从其父页面继承所有字段,因此,例如您的页面中有一个评级字段,您也可以在任务中访问它。

  • compleTED: Whether or not this specific task has been completed; this does not consider the completion/non-completion of any child tasks.
  • 已完成:此特定任务是否已完成;这不考虑任何子任务的完成/未完成。
  • fullyCompleted: Whether or not this task and all of its subtasks are completed.
  • 完全完成:此任务及其所有子任务是否完成。
  • text: The text of this task.
  • text:此任务的文本。
  • line: The line this task shows up on.
  • line:此任务显示的行。
  • path: The full path of the file this task is in.
  • path:此任务所在文件的完整路径。
  • section: A link to the section this task is contained in.
  • 部分:指向包含此任务的部分的链接。
  • link: A link to the closest linkable block near this task; useful for making links which go to the task.
  • 链接:指向该任务附近最近的可链接块的链接;用于创建指向该任务的链接。可以通过手动块的形式添加链接,
  • subtasks: Any subtasks of this task.
  • 子任务:此任务的任何子任务。
  • real: If true, this is a real task; otherwise, it is a list element above/below a task.
  • real:如果为true,这是一个真正的任务;否则,它是一个任务上面/下面的列表元素。
  • completion: The date a task was completed. If not annotated, will default to file modified time.
  • 完成:任务完成的日期。如果没有注释,将默认为文件修改时间。
  • due: The date a task is due, if it has one.
  • 到期日:任务的到期日(如果有的话)。
  • created: The date a task was created. If not annotated, defaults to file creation time.
  • 已创建:任务创建的日期。如果未加注释,则默认为文件创建时间。
  • annotated: True if the task has any custom annotations, and false otherwise.
  • 注释:如果任务有任何自定义注释,则为true,否则为false。

4 符号

4.1 \反斜杠可以避免进行双链转义


table without id  file.link as 笔记名称,aliases as 别名, "\[["+file.name+"|"+aliases+"]]" as 别名组合, postId as 发布ID ,"https://www.weqoocu.com/"+postId+".html" as url , dateformat(file.mtime,"yyyy-MM-dd") as 修改时间


WHERE number(postId)>0  and profileName="Default"  AND length(aliases)>0 

Sort number(postId) desc

5 函数

5.1 length(rows) group by


table  length(rows) as 数量

 from "9文献笔记/wu"

WHERE icontains(file.name,"wucai") and !icontains(url,"wucainote")  and length(全域名)>1

group by 全域名

sort length(rows) desc

5.2 length

判断某个字符的长度


table without id  file.link as 笔记名称,aliases as 别名, postId as 发布ID ,"https://www.weqoocu.com/"+postId+".html" as url , dateformat(file.mtime,"yyyy-MM-dd") as 修改时间


WHERE number(postId)>0  and profileName="Default"  AND length(aliases)>0 AND   file.mtime>date("2023-09-15")

Sort number(postId) desc


6 常用代码

7 JS 案例

7.1 获取 fn文件夹下, ## 正文 下的内容, 按照 编码 排序

//输入目标小标题(含#),例如:## 正文
const header = '## 正文'

// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列
const pages = dv.pages('[[滴答清单]]').filter(p => p.file.name.includes("") && p.file.path.includes("fn")).filter(p => p.file.name.includes("") || p.file.name.includes("")).sort(p=>p.编码,"asc");

// This regex will return text from the Summary header, until it reaches
// the next header, a horizontal line, or the end of the file
const regex = new RegExp(`\n${header}\r?\n(.*?)(\n#+ |\n---|$)`, 's')

for (const page of pages) {
    const file = app.vault.getAbstractFileByPath(page.file.path)
    // Read the file contents
    const contents = await app.vault.read(file)
    // Extract the summary via regex
    const summary = contents.match(regex)
    //显示全部包括空结果if (summary) {
    //不显示空结果if (summary && summary[1].trim()) {
    if (summary && summary[1].trim()) {
        // Output the header and summary
        dv.header(3, '[['+ file.basename + '|'+page.编码+' '+page.需求+']]')
        //或者dv.header(2, '[[' + file.basename + ']]')
        dv.PARAgraph(summary[1].trim())
    }
}

输出标签带链接:dv.header(4, '[['+ file.basename + '|'+page.编码+' '+page.需求+']]')
输出的内容不带链接: dv.header(3, page.编码+' '+page.需求)

7.2 标题不需要链接

//输入目标小标题(含#),例如:## 项目进度条
const header = '## 正文'

// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列
const pages = dv.pages('[[大模型]]').filter(p => p.file.name.includes("") && p.file.path.includes("fn")).filter(p => p.file.name.includes("") || p.file.name.includes("")).sort(p=>p.编码,"asc");

// This regex will return text from the Summary header, until it reaches
// the next header, a horizontal line, or the end of the file
const regex = new RegExp(`\n${header}\r?\n(.*?)(\n#+ |\n---|$)`, 's')

for (const page of pages) {
    const file = app.vault.getAbstractFileByPath(page.file.path)
    // Read the file contents
    const contents = await app.vault.read(file)
    // Extract the summary via regex
    const summary = contents.match(regex)
    //显示全部包括空结果if (summary) {
    //不显示空结果if (summary && summary[1].trim()) {
    if (summary && summary[1].trim()) {
        // Output the header and summary
        dv.header(4, '[['+ file.basename + '|'+page.编码+' '+page.需求+']]')
        //或者dv.header(2, '[[' + file.basename + ']]')
        dv.paragraph(summary[1].trim())
    }
}

8 DQL案例

9 已编码卡片


table without id  编码,需求 as 卡片 ,正文,"[["+file.name+"|详情]]" as 笔记详情

from  [[<% tp.file.title %>]] and ![[个人词条]] and ![[五彩]] and -#MOC  and -#dataview and "9文献笔记/fn"

where  number(编码)>0 

sort  number(编码)

9.1 根据标签检索文章


table without id  dateformat(file.ctime,"yyyy-MM-dd") as 时间, 需求 as 互动记录,"[["+file.name+"|详情]]" as 笔记详情

from   ![[个人词条]] and ![[五彩]]  and  "9文献笔记" 

where   icontains(file.tags,"<% tp.file.title %>")

sort  类型,file.ctime desc

9.2 设置链接

"["+标题+"]("+url+")" as 官网

9.3 域名判断

where icontains(母域名,"xiaohongshu.com")

9.4 详情

"[["+file.name+"|详情]]" as 详情

9.5 五彩笔记


Table without id "["+标题+"]("+file.name+")" as 标题,file.size as 字数,file.mtime as 修改时间,file.outlinks as 外链,highlightcount as 划线数, pagenote as 页面笔记,pagemirror as 全文剪藏
From "9文献笔记/wu"
where file.name!="wucai-2023-07-03-H8ADHKA"
Sort file.mtime  desc

limit 10

9.6 没有阅读的小红书


table without id  "["+标题+"]("+url+")" as 标题,file.link as 笔记名字,file.outlinks

 

WHERE icontains(母域名,"xiaohongshu.com")  and length(file.outlinks)=1

sort file.ctime desc

9.7 没有重复的7天内完成的任务


task

from  !#重复

where !completed  and   due!=null and due - date(today) <= dur(7 days) 

Sort  due

9.8 没有完成时间的任务



task

where !completed  and due=null


9.9 聊天记录


Table without id file.link,标题,file.outlinks
From "9文献笔记/wu" 

WHERE contains(标题,"Note")
Sort file.mtime desc
limit 10

9.10 可以通过关键词去检索全部中特点关键词的内容,这个脚本非常不错

	dataviewjs
	//全库检索//慎用//文件太多可能会卡  
	//使用时修改关键词即可  
	//输出全库带有关键词的段落  
	//呈现文本格式  
	const term = "DIKW"  
	const files = app.vault.getMarkdownFiles()  
	const arr = files.map(async ( file) => {  
	const content = await app.vault.cachedRead(file)  
	const lines = content.split("\n").filter(line => line.contains(term))  
	return lines  
	})  
	Promise.all(arr).then(values =>   
	dv.list(values.flat()))
	

9.11 支持时间判断


table without id  file.link as 主题名称, postId as 发布ID ,"https://www.weqoocu.com/"+postId+".html" as url , dateformat(file.mtime,"yyyy-MM-dd") as 修改时间

WHERE number(postId)>0 and dateformat(file.mtime,"yyyy-MM-dd") > "2023-08-18"  

Sort file.mtime desc

9.12 拼接内容:比如网站地址

"https://www.weqoocu.com/"+postId+".html" as url

9.13 查找链接或者反向链接某个笔记的笔记


from outgoing([[睡眠]]) OR [[睡眠]]

9.14 将字段数字化,变为大于零


table  postid as "发布id"

 
WHERE number(postId)>0  
 
Sort file.mtime  desc

limit 10


9.15 使用函数转换日期:dateformat(file.ctime,"yyyy-MM-dd")

dataview

table dateformat(file.ctime,"yyyy-MM-dd") as"时间" from "1 知识管理"

sort file.ctime desc limit 50

9.16 常用的组合

list from #A and #B
list from "University" or "Work"
list from -#Personal
list from [[CSS]] and -#HTML

9.17 排除某个文件

where file.name != "2021-04-09 Daily Note"

9.18 排除标签


-#Personal

9.19 展示



file.outlinks

9.20 读取文件标题含有特定字符的

Table without id file.link,file.outlinks
From "9文献笔记/wu" and -#moc
Sort file.outlinks 
WHERE icontains(标题,"Daily")
limit 10

9.21 支持文件名过滤


table without id  标题,url,全域名,母域名,file.link

from  [[新产品体验]] 

WHERE icontains(file.name,"wucai")

sort file.mtime desc

使用的[[yaml]],在介绍使用之前,我们简单的了解下Dataview的语法

# 当前文件中未完成的任务
table file.name as "文件名", length(filter(file.tasks, (t) => !t.completed)) as "未完成任务数"

from ""

WHERE !completed

WHERE file.name = this.file.name


```dataview

table

from #moc  

sort file.name asc

```dataview
list

from #1-0智慧/思维模型/系统思考 and  "9文献笔记"

sort file.name asc

# 待办清单
```dataview
task 
WHERE !completed    
GROUP BY file.name
sort  file.name asc

修改的卡片


list 

where  file.mday=date(today)

sort  file.name asc

``

list

from #1-0智慧/思维模型/系统思考  and ("5卡片盒" or "1索引")  

sort file.name asc

table file.tags as 标签,file.inlinks as 引用地址,file.outlinks as 流向地址

from #1-0智慧/思维模型/卡片盒笔记法  

sort file.name asc

今天创建的卡片

list 
where  file.cday=date(this.file.cday)
sort  file.name asc
 
guest

0 评论
最旧
最新
内联反馈
查看所有评论