脚本 #dataview

DQL语句

Data QueryLanguage 数据查询语言

标准语法

SELECTselect_list

[ INTOnew_table ]

FROMtable_source

[ WHEREsearch_condition ]

[ GROUPBY group_by_expression ]

[ HAVINGsearch_condition ]

[ ORDERBY order_expression [ ASC | DESC ] ]

文件夹03教程的文件列表

  1. list from "03教程"

文件夹03教程里面的todo

  1. task from "03教程"

文件夹03教程已经完成的任务

  1. dv.taskList(dv.pages('"03教程"').file.tasks.where(t => t.completed));

文件夹03教程未完成的任务

  1. dv.taskList(dv.pages('"03教程"').file.tasks.where(t => !t.completed));

装备属性

  1. table 技能冷却时间缩减,暴击几率,物理吸血,免疫伤害
  2. from "03教程"
  3. where contains(file.name, "装备")

元数据

  1. table author,title
  2. from "03教程"
  3. where contains(file.name, "元")

计算时差

=(date(2022-02-01)-date(today))

文件修改时间

This page was last modified at $= dv.current().file.mtime.

输出所有带有关键词的行, 数据展示方式: 列表

  1. const keyword = "暴击";
  2. const files = app.vault.getMarkdownFiles();
  3. const newFiles = files.filter((file) => file.name.includes("装备"));
  4. const arr = newFiles.map(async (file) => {
  5. const content = await app.vault.cachedRead(file);
  6. const lines = content.split("\n").filter((line) => line.contains(keyword));
  7. return lines;
  8. });
  9. Promise.all(arr).then((values) => dv.list(values.flat()));

输出所有带有关键词的行, 数据展示方式: 表格

  1. const term = "免疫伤害";
  2. const files = app.vault.getMarkdownFiles();
  3. const newFiles = files.filter((file) => file.name.includes("装备"));
  4. const arr = newFiles.map(async (file) => {
  5. const content = await app.vault.cachedRead(file);
  6. const lines = content.split("\n").filter((line) => line.contains(term));
  7. return [file.name, lines];
  8. });
  9. // 生成表格
  10. Promise.all(arr).then((values) => {
  11. dv.table(["文件名", "免疫伤害"], values);
  12. });

dataviewjs](https://blacksmithgu.github.io/obsidian-dataview/data-queries/))

  1. let pages = dv.pages("#装备").where(b => (parseInt(b.免疫伤害.replace("%","")) > 5));
  2. for (let group of pages.groupBy((b) => parseInt(b.免疫伤害.replace("%", "")) > 50)) {
  3. dv.header(3, group.key);
  4. dv.table(
  5. ["文件名","免疫伤害","暴击几率"],
  6. group.rows.sort((row) => row.免疫伤害, "desc").map((row) => [row.file.link, row["免疫伤害"], row["暴击几率"]])
  7. );
  8. }

创建元素

  1. dv.el("b", "This is some bold text");
  2. dv.header(1, "一级标题");
  3. dv.header(6, "六级标题");
  4. dv.paragraph("This is some text");
  5. dv.span("This is some text");
  6. dv.list([1, 2, 3])
  7. dv.list(dv.pages('"03教程"').file.name)
  8. dv.list(dv.pages('"03教程"').file.link)

注意点

文件夹是单引号里放双引号, 双引号里面写文件名

  1. dv.list(dv.pages('"03教程"').file.name)

文件属性](https://blacksmithgu.github.io/obsidian-dataview/data-annotation/))

  • 文件名: $= dv.current().file.name
  • 文件的父文件夹: $= dv.current().file.folder
  • 文件的完整路径: $= dv.current().file.path
  • 文件大小: $= dv.current().file.size
  • 文件标签: $= dv.current().file.tags
  • 包含标签装备的文件路径: $= dv.pagePaths("#装备")
  • 包含标签装备的文件路径: $= dv.list(dv.pagePaths("#装备"))

显示元数据中的标题

  1. ---
  2. 标题: 分成两半的子爵
  3. 作者: 伊塔洛·卡尔维诺
  4. 分类: 中篇
  5. 出版: 译林出版社
  6. 在读: 2022-01-02
  7. 已读: 2022-01-06
  8. ---
  9. ```dataviewjs
  10. // 04测试是一个文件夹
  11. let files = dv.pages('"04测试"');
  12. const values = files.map(async (file) => {
  13. return ["[[" + file.file.path + "|" + file.标题 + "]]", file.作者, file.分类, file.出版, file.在读, file.已读];
  14. });
  15. Promise.all(values).then((values) => {
  16. dv.table(["标题", "作者", "分类", "出版", "在读", "已读"], values);
  17. });
  1. <a name="nimJh"></a>
  2. ## 读取文件内容
  3. ```javascript
  4. const newFiles = dv.pages('"04测试"').file;
  5. const arr = newFiles.map(async (file) => {
  6. const content = await app.vault.readRaw(file.path);
  7. return [file.link, file.path, content];
  8. });
  9. Promise.all(arr).then((values) => {
  10. dv.table(["文件名", "文件路径", "文件内容"], values);
  11. });

dataview官网

https://blacksmithgu.github.io/obsidian-dataview/

参考资料

Obsidian 插件之 Dataview - 知乎 (zhihu.com)
obsidian插件之dataview入门 - 知乎 (zhihu.com)

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
—- 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

03教程01数据库语言 - 图1

QQ群

747748653
03教程01数据库语言 - 图2