1. #脚本 #dataview
  2. DQL语句
  3. -
  4. Data QueryLanguage 数据查询语言
  5. 标准语法
  6. -
  7. > SELECTselect_list
  8. >
  9. > [ INTOnew_table ]
  10. >
  11. > FROMtable_source
  12. >
  13. > [ WHEREsearch_condition ]
  14. >
  15. > [ GROUPBY group_by_expression ]
  16. >
  17. > [ HAVINGsearch_condition ]
  18. >
  19. > [ ORDERBY order_expression [ ASC | DESC ] ]
  20. 文件夹*03教程*的文件列表
  21. -
  22. ```dataview
  23. list from "03教程"

文件夹03教程的文件列表, 过滤器: 文件名包含数据两个字 -

  1. list from "03教程" where contains(file.name,"数据")

文件夹03教程的文件列表, 过滤器: 文件名不包含数据两个字 -

  1. list from "03教程" where !contains(file.name,"数据")

文件夹03教程的文件列表, 过滤器: 文件名不包含数据两个字, 限制显示3条 -

  1. list from "03教程" where !contains(file.name,"数据")
  2. limit (6)

文件夹03教程的文件列表, 过滤器: 文件名包含 装备 09 -

  1. list from "03教程"
  2. where contains(file.name,"装备")
  3. where contains(file.name,"09")

文件夹03教程的文件列表, 过滤器: 文件名包含 装备 09 -

  1. list from "03教程"
  2. where contains(file.name,"装备") and contains(file.name,"09")

文件夹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));1
  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("#装备"))

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

参考资料 - Obsidian 插件之 Dataview - 知乎 (zhihu.com) obsidian插件之dataview入门 - 知乎 (zhihu.com) https://c94n0azlfu.feishu.cn/docs/doccnTu0YTtoiC7C70HaUOyPBFh

  1. <a name="VLdM1"></a>
  2. ## 显示元数据表格
  3. ```javascript
  4. ---
  5. 标题: 分成两半的子爵
  6. 作者: 伊塔洛·卡尔维诺
  7. 分类: 中篇
  8. 出版: 译林出版社
  9. 在读: 2022-01-02
  10. 已读: 2022-01-06
  11. ---
  12. ```dataviewjs
  13. // 04测试是一个文件夹
  14. let files = dv.pages('"04测试"');
  15. const values = files.map(async (file) => {
  16. return ["[[" + file.file.path + "|" + file.标题 + "]]", file.作者, file.分类, file.出版, file.在读, file.已读];
  17. });
  18. Promise.all(values).then((values) => {
  19. dv.table(["标题", "作者", "分类", "出版", "在读", "已读"], values);
  20. });

```

名人名言

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

声明

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

bilibili

牙叔教程

微信公众号 牙叔教程

dataview脚本 - 图1

QQ群

747748653
dataview脚本 - 图2