[js] 添加文档 / 块到指定数据库(支持添加任意字段)

缘起

批量导入文档到数据库 0.0.6 版全新发布 之后,又一款导入数据库的代码片段问世。

之前的代码主打是批量导入,偏向于自动化,这个代码主打是单个或少量导入,主打是手动操作,通过块菜单或文档菜单导入,并且支持绑定块和不绑定块两种操作。

同样,与之前的代码一样,这个代码也是基于某源(思源)友的需求( 发送到数据库设置成默认取消绑定块,用代码片段能实现吗?或者没有大佬用插件实现? )而开发的。

改功能已全部使用到了 @Achuan-2 大佬提供的 7 个数据库 api 的操作,有想了解这些 api 用法的小伙伴也可以参考下该代码。

功能简介

1 支持自定义菜单及数据库,支持多个数据库配置

2 支持添加数据库的同时添加其他任意字段到数据库

3 添加其他字段时,可根据列表添加,多个同名的取第一个

4 添加其他字段时,具体添加内容是什么可以自定义,也可以使用回调函数实现。

使用说明

首先在代码参数配置中添加相应配置,然后在块菜单或文档菜单中选择 menus 参数中配置的菜单即可。

如果想要添加数据库的同时添加其他更多字段,可以把 isEnableMoreCols 开启,然后配置 menus 的 otherCols 字段即可。

参数配置如下:

// 是否开启,同时添加其他字段 true 开启 false 不开启
// 开启时,需要配置menus中的otherCols字段信息(可参考下面的示例)
const isEnableMoreCols = false;

// 块菜单配置
const menus = [
    {
        // 菜单名,显示在块或文档右键菜单上
        name: "添加到数据库A",
        // 添加到的数据库块id列表(必填),注意是数据库所在块id,如果移动了数据库位置需要更改
        toAvBlockId: "20250501223635-2hu6d9z",
        // 指定数据库的列名,不填默认是添加到主键列,该参数仅对不绑定块菜单有效,如果多个列名一样的则取第一个
        // 注意,目前仅支持文本列
        toAvColName: "",
        // 是否绑定块菜单,true 绑定,false 不绑定
        isBindBlock: true,
        // 其他扩展字段
        // getColValue回调函数可动态计算字段值返回
        otherCols: [
            {
                colName: '状态',
                // 对于绑定块,块/文档id === rowID
                getColValue: (keyID, rowID, cellID, avID) => {
                    return {"mSelect": [{"content":"今天"}]};
                },
            }
        ],
    },
    ...
}

可通过参数 isBindBlock 指定是否绑定块或文档,不绑定块是指仅仅发送块内容或标题文本到数据库。

可通过参数 toAvBlockId,指定将要添加到的数据库块 id,注意,是数据库所在块的 id,不是数据库 id(因此,如果移动了数据库位置需要更改块 id)。

可通过参数 toAvColName 指定数据库的列名,不填默认是添加到主键列,该参数仅对不绑定块菜单有效,如果多个列名一样的则取第一个(注意,目前仅支持文本列)

注意:只能在块菜单或文档菜单中操作(你的右键可能不是块菜单)

预览

块菜单如下

image.png

文档菜单如下

image.png

代码

https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E6%B7%BB%E5%8A%A0%E5%9D%97%E5%88%B0%E6%8C%87%E5%AE%9A%E6%95%B0%E6%8D%AE%E5%BA%93.js

鸣谢

感谢 @Achuan-2 大佬提供的数据库 api 使用方法。

打赏作者

  • 思源笔记

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

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

    25645 引用 • 106063 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    173 引用 • 1183 回帖
4 操作
wilsons 在 2025-05-16 01:14:28 更新了该帖
wilsons 在 2025-05-16 01:13:21 更新了该帖
wilsons 在 2025-05-02 16:22:40 更新了该帖
wilsons 在 2025-05-02 16:04:40 更新了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • xnyshu 1

    感谢!已赞赏十元不成敬意。

    这个是不是只能指定一个数据库?我添加了两个数据库,但自动发送到了第一个数据库里。没有看到选择数据库的菜单。

    像这样:

    截屏 2025050214.25.58.png

    1 回复
  • wilsons

    ❤️ 感谢打赏!

    这个数据库不是通过菜单选择的,那个菜单是思源自带的菜单,这个代码并不用这个菜单。

    使用方法:

    1. 先复制数据库所在块的 ID

      image.png

    2. 你打开代码,按下图修改

      image.png

    3. 然后在编辑器中选择要发送的块后,点块菜单,选择“添加到指定数据库(不绑定块)”即可,支持同时选择多个块添加。

    4. 为防止意外,最好修改完代码后刷新或重启下思源。

    注意,目前,仅支持一次发送到一个数据库中。(最新版 0.0.2 版已支持同时发送到多个数据库,参考分割线下的介绍

    你说的添加了两个数据库是怎么添加的?你是想同时发送到多个数据库中吗?


    更新下代码,0.0.2 版已支持同时发送到多个数据库中。

    image.png

    1 回复
    2 操作
    wilsons 在 2025-05-02 15:05:21 更新了该回帖
    wilsons 在 2025-05-02 15:03:28 更新了该回帖
  • 我添加两个数据库是有不同分工的,A 类资料发到数据库 A,B 类资料发到数据库 B。能做到跳出数据库选单吗?

    1 回复
  • wilsons

    你每次添加都选择数据库不麻烦吗?另外,做 UI 也比较麻烦。

    我建议在代码中增加这样的配置

    const toAvBlockIds = {
        "添加到A类数据库": "a类数据库块id",
        "添加到B类数据库": "b类数据库块id",
    }
    

    然后,在菜单中就会显示”添加到 A 类数据库“和”添加到 B 类数据库“了,你看如何?

    1 回复
  • 可以。我常用的也就两三个类型的资料。这就够了。谢谢。

    1 回复
  • wilsons 1 评论

    已更新至 0.0.3。

    重新更新下代码试试。

    image.png

    太感谢了,大神!
    xnyshu
  • 有一个小问题。如果在多个页签选中了块而且都没有取消选中,那么会把这几个块全都发送到数据库。能不能即使有多个页签到块选中,也只发送当前选中块?因为有时候不知道哪个页签到块选中了没有取消。

    1 回复
  • wilsons

    已更新至 0.0.4。

    重新更新下代码再试试。

  • image.png

    大佬,在叶归插件的一键记事窗口里面的块标菜单里添加没有反应,只能在思源本体窗口里的块标菜单才能添加,试了 knote 插件的快速添加也一样,会不会是思源 api 的问题?

    1 回复
  • wilsons

    我这边可以耶

    建议先确保代码是到最新版,可以用对比软件看看,或者最保险办法就重新复制一份试试。

    然后用新空间测试看看,排除其他因素影响。

    image.png

    如果仍有问题,请给出重现步骤。

    1 回复
  • 我用的是 3.1.29 最新开发版,可能有新特性冲突了,我重开了新工作空间也是不行

    重现步骤:3.1.29dev,开新工作空间,装叶归插件并设置日记本位置和一键记事快捷键,导入任务数据库模板,配置 js 代码至任务数据库 id,js 设置的是绑定块,然后快捷键启动一键记事,输入[]任务项,然后右击任务项前的块标添加,然后点击添加后块未添加进数据库

    1 回复
  • wilsons 1 评论

    已兼容叶归。

    注意,由于叶归等内嵌编辑器可能使用的非思源相同的页面结构,不保证其他插件也能用(已尽量做了通用化和兼容)。

    由于每个插件的 dom 结构可能不太相同,没法针对所有的插件去兼容一遍。

    好滴,感谢大佬,我也就用叶归的快速记事
    5kyfkr
  • wilsons 1

    0.0.6 支持添加任意字段到数据库。

请输入回帖内容 ...
wilsons
正在努力开发 wilsons 工具箱中 🛠️ 目前已正式入驻爱发电啦!💖 想催更、提需求?欢迎访问 👉 https://afdian.com/a/wilsons