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

本贴最后更新于 234 天前,其中的信息可能已经事过景迁

缘起

批量导入文档到数据库 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 使用方法。

打赏作者

image.png

  • 思源笔记

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

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

    28446 引用 • 119783 回帖
  • 代码片段

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

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

    285 引用 • 1986 回帖
5 操作
wilsons 在 2025-06-05 05:55:12 更新了该帖
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 更新了该帖

相关帖子

欢迎来到这里!

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

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

    不用,之前的方法也是思源支持的方法,不算是 hack,只有计算 rowid 算是取巧,不过也不影响。

  • 其他回帖
  • 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 更新了该回帖
  • 我用的是 3.1.29 最新开发版,可能有新特性冲突了,我重开了新工作空间也是不行

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

    1 回复
  • image.png

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

    1 回复
  • 查看全部回帖
wilsons
正式入驻知乎了,以后新贴主要在这里。 欢迎大家订阅关注! 你的关注对我是莫大鼓励,也能让我持续产出优质内容,我们一起成长 🙏 点这里立即关注:https://www.zhihu.com/people/wilsonses