思源如何筛选出未加入数据库的文档?或者有没有办法一键将所有子文档都添加到数据库中(类似目录插件功能)

本贴最后更新于 302 天前,其中的信息可能已经时移世易
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26122 引用 • 108455 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10039 引用 • 45621 回帖 • 69 关注
1 操作
ONIONLYONE 在 2024-08-31 16:25:37 更新了该帖

相关帖子

被采纳的回答
  • wilsons 2

    补充说明:

    该贴不再维护,有需要的用户请移步至 批量导入文档到数据库 0.0.6 版全新发布


    关于一键将所有子文档都添加到数据库中,今天我试着实现了这个功能。

    代码如下

    使用方法:

    把上述代码粘贴到嵌入 SQL 代码块中即可(任意文件都可),即输入{{}}后在弹出的输入框中填入即可。

    然后修改变量 docBlockId 为你要导入的父文档块 id,变量 dbBlockId 为你要导入的数据库的块 id。变量 docsSql 为你要查询的 SQL 语句逻辑,请根据实际情况修改,详情请看代码注释。

    然后,执行结果如下,然后重新打开或按 F5 刷新数据库所在页面即可查看到导入结果。

    image.png

    注意事项:

    1. 数据导入有风险,请做好备份工作再进行尝试。
    2. 数据量巨大时可能存在性能问题。

    再次提醒!!!请在新空间测试无误后使用,使用前请做好备份!!!

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wilsons 2

    查询未加入数据库的文档,这个用普通的 SQL 是无法查询的,因为数据库中的文档在 sqlite 中并没有索引。

    这个需要从数据库文件中读取插入的文档,然后在 SQL 查询中再排除这些文档就行了。

    下面是个解决方案的示例,不知是否满足你的需求。

    代码如下(链滴字数限制,只能把代码放到其他平台了):

    使用方法:

    将上述代码放到 SQL 块中即可,即输入{{}}后,在弹出的 SQL 输入框中输入即可。

    代码说明:

    这个示例也可以解决你问题修改前的那种查询方式,只需要把 and path like '/xxxx-xxxx%' 开启即可,如果不包含父文档自身,把 and id != 'xxxx-xxxx' 开启即可,详情见代码注释说明。

    其实,这个查询方式的本质和正常查询没有任何区别,无非在最后加了排除数据库文档的条件罢了。

    开启 formatByTitle(result);,查询的结果是显示文档的标题,不开启查询的结果是显示文档的内容,思源默认的是显示文档的内容。

    另外,如果数据量巨大,这种方式可能存在性能问题,数据量巨大的情况下,最好的方法是提前对数据库内容做索引,由于方法复杂,如果有需求请自行研究实现。

    效果如下:

    开启 formatByTitle(result);结果

    image.png

    未开启 formatByTitle(result);结果

    image.png

    关于,一键将所有子文档都添加到数据库,目前只能通过 ctrl+ 点击多选,然后拖动到数据库里,其它应该尚未有更好办法吧,期待大佬们有更好解决方式!

    或许可以通过修改数据库 json 的方式实现吧,但这样修改文件可能存在未知风险,你如果不在意的话倒是可以尝试下。

    1 回复
    1 操作
    wilsons 在 2024-08-31 17:41:18 更新了该回帖
  • ONIONLYONE

    感谢大佬的解答,太详细了,感动。

  • 一键添加到数据库的话,可以考虑:

    1: quicker 动作;

    插入子文档到数据库 - by 浅沧 - 动作信息 - Quicker (getquicker.net)

    2: listChildDocs 挂件;

    1 回复
  • ONIONLYONE

    佬,quicker 动作你可以使用吗?我试了没有用

    1 回复
  • 我只是知道有这个动作,具体我没用过;我用的是挂件;

    1 回复
  • wilsons 2

    补充说明:

    该贴不再维护,有需要的用户请移步至 批量导入文档到数据库 0.0.6 版全新发布


    关于一键将所有子文档都添加到数据库中,今天我试着实现了这个功能。

    代码如下

    使用方法:

    把上述代码粘贴到嵌入 SQL 代码块中即可(任意文件都可),即输入{{}}后在弹出的输入框中填入即可。

    然后修改变量 docBlockId 为你要导入的父文档块 id,变量 dbBlockId 为你要导入的数据库的块 id。变量 docsSql 为你要查询的 SQL 语句逻辑,请根据实际情况修改,详情请看代码注释。

    然后,执行结果如下,然后重新打开或按 F5 刷新数据库所在页面即可查看到导入结果。

    image.png

    注意事项:

    1. 数据导入有风险,请做好备份工作再进行尝试。
    2. 数据量巨大时可能存在性能问题。

    再次提醒!!!请在新空间测试无误后使用,使用前请做好备份!!!

    1 回复
    2 操作
    wilsons 在 2024-09-05 14:36:37 更新了该回帖
    wilsons 在 2024-09-01 16:59:36 更新了该回帖
  • ONIONLYONE

    大佬,我开新空间测试了下,目前并没有发现问题,完美实现了我的需求。

    我不会编程,想请教下该代码是不是只是更改数据库 json 文件和对应的数据库块,对子文档的数据影响风险较小?

    1 回复
  • ONIONLYONE

    好的,谢谢

  • 只更改导入的那个数据库的 json 文件,其实只需要备份这个文件即可。其他没任何影响,对文档及数据块没有影响。 这个文档的路径就是 /data/storage/av/数据库id.json 注意,这里是数据库 id,不是数据库块 id。

    可以通过数据库块 id,然后查询 markdown 字段查看数据库 id,SQL 查询 select markdown from blocks where id = '数据库块id';,如下图箭头指向的方向就是数据库 id,然后数据库存放路径是/data/storage/av/数据库 id.json

    image.png

    1 回复
  • ONIONLYONE

    好的,再次感谢大佬

    1 回复
  • 不客气,我觉得这个功能有时候还挺实用的,等会我把脚本打上版本号,后续有问题可以再反馈,如果发现论坛的版本号比你本地的高就说明有版本更新了 😄 。

    4 回复
  • 大神!!!爱死你了!!!❤️ 😄

  • 完全没问题!大佬如果想要更多人用,可以弄个插件,下载量绝对爆炸!!!😄

    1 回复
  • 刚发现一个小问题 😂 ,就是插入后,如果子文档笔记重新命名,数据库的名字还是原来的,一直 F5 刷新,也不行!

    image.png

    1 回复
  • wilsons 1 赞同

    哈哈,感谢建议!先用着,做插件和解决问题复杂度完全不一样。

    就像产品和 demo 的区别,要做成产品就要通用,完善,兼容好,体验好,持续维护等。

    而,demo 或临时解决方案是针对某一问题的。

    可能你花 10% 的时间就能解决问题,但如果要把解决方案做成产品要花 80% 以上甚至更多的时间才行。

    而且,业余做插件不易,我之前曾在空闲和有兴趣的时候做过不少插件(非思源的),后来发现维护和精力是个难题。如果不维护感觉不负责,维护的话有时实在精力有限。

    所以,我觉得如果业余做插件,精心维护好一两个就足矣,多了真应付不来,毕竟现在各类软件都升级很快,不维护,很快就各种问题了。

    借着这个问题,突然想到了这些,说一下自己的浅见,不一定正确哈 😄 。

  • 感谢反馈!

    确实是,还不知道原因,我对比了下,自动导入的数据库文件和手动导入的文件没发现有任何区别,可能思源在其他地方也有关联吧,后续找到了问题再解决。

    不过,脚本更新了 0.0.2 版,这个版本采用临时方案,就是当修改文档名后,重新导入一次即可更新数据库中的文档名,如果你的导入脚本和数据库块在同一个文档内重新打开或刷新页面即可。

    2 回复
  • ONIONLYONE 1 赞同

    我最近在尝试 MOC 的管理方法,把所有主题笔记文档都放在父文档下,用数据库进行管理,摆脱传统文件夹分类的管理方式,我觉得使用同样管理方法的用户应该都挺需要这个功能的。

  • Afterglow 2 1 赞同 via SCMR-W09

    挂件-列出子文档-常规设置-模式-数据库,即可一键将子文档添加到下方的数据库

    1 回复
  • ONIONLYONE

    感谢,帖子里的另一位大佬也提到了这个挂件,但我以为只能列出文档 😂

  • 第四版,发现了点小问题,在运行后,| 这个光标没了,很奇怪image.png

  • 大佬,能不能再加个可选择的功能:只添加,子文档,不添加子文档的子文档。

    如果添加子文档的子文档(套娃),很不好整理,往往只需要部分子文档的子文档。
    这样每次刷新都要删除一遍不想插入的,很麻烦,尤其是文档过多的时候。辛苦了!

    1 回复
    1. 光标问题,先确定是否脚本引起的问题,新空间测试排除干扰项。如果确定有问题,请给出问题的详细描述和重现步骤。另外,脚本已更新到 version 0.0.5,试试是否有问题。
    2. 关于排除后代文档问题,首先,这个脚本并没有限制导入的内容,导入的内容由你的 SQL 查询决定的,即可以是文档内容,也可以是其他等。这里,你要想实现只导入直接子文档,而不导入后代子文档的话,可以在 SQL 中添加查询条件 and (LENGTH(path) - LENGTH(REPLACE(path, '/', ''))) / LENGTH('/') <= 2 来实现,不过我在 0.0.5 版本中默认加了这个功能,所以,你只需要把变量 const maxLevel 设置为 2,即 const maxLevel = 2 即可。注意,这个层级是从父文档开始算 1 级,然后往后嵌套最大层级数。

    再次重申,这个脚本具体导入数据库的内容,脚本并没限制,由你的 SQL 查询决定的,你可以导入任何你查询到的结果。

    另外, @ONIONLYONE @chenhao54180.0.5 使用官方 api 插入文档到数据库,彻底解决了 0.0.2 中,文档名修改后数据库无法更新名称的问题,并且插入文档后能自动刷新数据库,不再需要手动刷新页面。

    0.0.5 注意事项:

    1. 打开文档或刷新页面时默认不执行脚本,如果想要执行,把 runOnLoad 改为 true 即可
    2. 执行前弹出确认对话框,关闭的话,把 showConfirm 设为 false 即可
    3. 新增导入文档的排序方式,默认按照文档树里的顺序导入,如果想按 SQL 查询结果导入,把 sortByTreeOrder 设为 false 即可,该参数仅对导入文档有效,导入普通块无效。
    4. 新增导入文档的层级,默认 7 级,即从父文档 1 级,开始往下算,默认最大 7 级,如果想修改限制,修改 maxLevel 参数即可。
    5. 新增自定义备注,即当页面加载后,脚本上显示的提示文字,修改 memo 参数可自定义。
    6. 由于 0.0.5 抛弃了修改 json 的方式,使用官方 api 导入数据库,因此没有未知风险。但由于官方 api 没有统计成功和失败的文档数,因此结果只显示导入的文档数,不过一般不会失败,已导入的会忽略。

    后续可能新增功能:

    1. 可以把修改过的代码保存为模板,下次直接通过斜杠命令 =》模板 =》你保存的模板名直接打开,不用再复制粘贴。
    2. 执行前的预览和确认
    3. 从模板加载时,可根据需要弹出输入文档块 id 和数据库 id 的输入框,然后执行完后删除嵌入块即可,适合临时使用。
    1 回复
  • 爱了爱了 😄

请输入回帖内容 ...

推荐标签 标签

  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 632 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖 • 2 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 182 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 642 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 26 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 2 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 37 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 262 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 1 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 111 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    954 引用 • 944 回帖
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 49 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 8 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖 • 1 关注
  • 叶归
    12 引用 • 56 回帖 • 23 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 3 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    291 引用 • 4495 回帖 • 662 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 29 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖