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

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

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

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

    26737 引用 • 111410 回帖
  • Q&A

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

    10324 引用 • 46873 回帖 • 62 关注
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 回复
  • 爱了爱了 😄

请输入回帖内容 ...

推荐标签 标签

  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 4 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    10 引用 • 15 回帖 • 4 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    173 引用 • 541 回帖
  • OpenCV
    15 引用 • 36 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 611 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 2 关注
  • Lute

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

    29 引用 • 202 回帖 • 37 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    43 引用 • 44 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 2 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1432 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 15 关注
  • API

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

    79 引用 • 431 回帖
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 512 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • Visio
    1 引用 • 2 回帖
  • Excel
    31 引用 • 28 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 241 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 3 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 2 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 165 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 642 关注