
思源笔记 SiYuan v3.3.0 技术解析数据库按字段分组与细节体验全面升级【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan本文以思源笔记SiYuanv3.3.0 版本发布说明为核心系统梳理该版本引入的「数据库按字段分组」核心特性、数据库与编辑器的大量细节改进、缺陷修复清单以及面向插件开发者新增的 API 与事件总线变化。结合本仓库 kernel/av 与 app/src/plugin 的源码实现帮助读者理解分组机制的底层数据结构、升级前必须注意的兼容性事项以及如何在插件中调用getActiveTab、getActiveEditor等新增函数。版本概述与升级注意事项v3.3.0 的核心主题是数据库支持按字段分组并围绕数据库、编辑器、导出、同步与剪藏等模块改进了大量细节。升级前请务必注意以下两点兼容性变化数据库格式不向下兼容旧版本无法打开新版本创建的数据库。如果你使用的移动端是从应用商店安装的建议等待商店上架新版本后再更新桌面端避免出现移动端无法打开桌面端所建数据库的情况。模板字段中多选字段值的类型变更数据库模板字段中多选字段的取值由字符串string变更为字符串数组string array。凡是依赖模板字段输出多选值的既有模板、导出脚本或插件都需要按新的数组结构进行适配对应 issue #15575。核心特性数据库按字段分组「数据库按字段分组」是 v3.3.0 引入的最大特性对应 issue #10964。分组功能允许用户基于某一字段单选、多选、数字、日期等将数据库记录划分为若干组配合折叠、排序与隐藏空组能力让视图更接近轻量级看板或分类报表。分组规则的底层数据结构从源码看分组规则由 kernel/av/group.go 中的ViewGroup结构体描述type ViewGroup struct { Field string json:field // 分组字段 ID Method GroupMethod json:method // 分组方式 Range *GroupRange json:range,omitempty // 分组范围 Order GroupOrder json:order // 分组排序规则 HideEmpty bool json:hideEmpty // 是否隐藏空分组 }其中各字段含义如下字段JSON 键说明Fieldfield执行分组所依据的字段 IDMethodmethod分组方式见下文GroupMethodRangerange分组范围omitempty表示仅数字范围分组时使用Orderorder分组排序规则HideEmptyhideEmpty是否隐藏空分组分组方式GroupMethodGroupMethod定义了六种分组方式kernel/av/group.go常量值含义GroupMethodValue0按值分组单选、多选等按选项值直接分组GroupMethodRangeNum1按数字范围分组配合GroupRange的起止与步长GroupMethodDateRelative2按相对日期分组如今天、昨天、本周等GroupMethodDateDay3按天日期分组GroupMethodDateWeek4按周日期分组GroupMethodDateMonth5按月日期分组GroupMethodDateYear6按年日期分组日期类字段可自由切换日/周/月/年粒度数字字段可按NumStart、NumEnd、NumStep定义范围步长type GroupRange struct { NumStart float64 json:numStart // 数字范围起始值 NumEnd float64 json:numEnd // 数字范围结束值 NumStep float64 json:numStep // 数字范围步长 }分组排序GroupOrderGroupOrder支持四种排序规则kernel/av/group.go常量值含义GroupOrderAsc0升序GroupOrderDesc1降序GroupOrderMan2手动排序GroupOrderSelectOption3按选项在字段中的顺序排序仅单选和多选字段适用对应 issue #15500视图分组状态的运行时管理内核在 kernel/av/av.go 中提供了视图分组相关的方法IsGroupView()判断当前视图是否为分组视图GetGroupValue()返回分组值GetGroupByID/GetGroupByGroupValue用于按 ID 或分组值定位子视图RemoveGroupByID删除指定分组GetGroupKey从属性视图中解析分组键。分组视图的折叠状态、隐藏计数等则在 kernel/av/layout.go 中通过SetGroupFolded、SetGroupHidden、GetGroupCalc等管理。分组功能与筛选共用同一套表达式求值机制ViewFilter.IsGroup()与测试用例 kernel/av/filter_test.go 的TestEvalNode_GroupSemantics验证了分组语义的正确性。数据库模块改进详解v3.3.0 对数据库模块进行了系统性打磨主要集中在以下几类字段默认填充改进#11966文档块被添加到数据库或创建记录时字段默认值的填充逻辑更符合预期。“添加到数据库”改进#10659将内容追加进既有数据库时交互与结果更准确。数据库块绑定改进#14511块与数据库视图的绑定关系处理更稳定。汇总字段能力扩展汇总字段Rollup此前只能汇总常规字段v3.3.0 起支持使用模板字段#12384以及更新时间/创建时间字段#15662同时汇总字段支持复制为副本#15417且修复了汇总字段筛选结果不正确的问题#15608。模板字段能力扩展模板字段支持引用其他模板字段#15517并改进对多选字段的使用#15575即上文提到的多选值数组化变更。交互与性能优化改进「垂直拖动填充值」#15518数据库拖拽的性能与交互优化#15552筛选条件未参与计算时移除高亮#15558。显示与浏览体验卡片视图支持显示字段名#15180浏览数据库表当前视图图片时过滤隐藏列#15548改进数据库属性面板#15664。健壮性约束限制数据库标题为 512 个字符#15459当.sy文档文件或数据库.json超过 8MB 时向用户发出提醒#15451避免超大文件带来性能隐患。缺陷修复修复了数据库选择字段在快速添加选项时丢失选项的问题#13261。编辑器与渲染细节改进输入与解析改进br输入解析#15373粘贴时解析img标签#15464导入时同样改进img标签解析#15638改进 HTML 剪藏#15438。性能提升大量内容的粘贴性能#15306改进数据同步避免因折叠块引起的冲突#15329手动优化数据索引以减少空间占用并提升性能#15663。块操作删除块时在某些情况下不再在文档开头残留空块#15336退出折叠块时改进聚焦定位#15670改进文档标题的回车处理#15294。代码块改进自定义代码块的行号显示#15324代码块在导出预览时保留属性#15343支持代码块高亮模板语法并将代码块模板导出为段落#15345更新 highlight.js 插件#15386。导出改进导出预览模式的 CSS 变量值填充#15110导出预览模式支持聚焦使用#15340改进导出 PDF 样式#15463文档支持复制为 Markdown#15397。其他闪卡为文档时显示标题#14201改进模板搜索高亮#15338改进状态栏的索引创建信息提示#15390改进标签中表情符号的搜索#15391改进卡片视图显示#15389标签页切换改进#15546“重新 OCR”在 Tesseract 未启用时给出弹窗提示#15367“上传资源文件到云端”支持聚焦使用#15462。修复缺陷取消超级块时行内公式未渲染#15341。从资源文件夹拖动文件到编辑器导致内核退出#15355。新窗口锁定后再进入会重复生成托盘#15357。查找替换会错误地将标签转换为文本#15372。浮窗中将列表转为段落块后插入位置错误#15396。公式相关编辑器状态异常#15554。数据库汇总字段筛选结果不正确#15608。数据库选择字段若添加选项过快会丢失选项#13261。开发重构升级至 Electron v37.3.1v3.3.0 将桌面端运行框架升级至Electron v37.3.1#15410。桌面端相关配置可见仓库根目录的 electron-builder.yml 及各平台构建配置electron-builder-linux.yml、electron-builder-darwin.yml、electron-builder-arm64.yml桌面端入口逻辑位于 app/electron/main.js。升级意味着 Chromium 内核与 Node.js 运行时的整体换代带来安全性与底层能力的提升。面向插件开发者的 API 变化v3.3.0 为插件体系新增了多个函数与事件全部导出在 app/src/plugin/API.ts 的API对象中handleEmptyContent#15398新增IProtyleOptions.handleEmptyContent可选回调类型定义见 app/src/types/protyle.d.ts当 Protyle 编辑器内容为空时被调用触发点见 app/src/protyle/index.ts插件可据此实现自定义的空内容引导。getActiveTab#15415返回当前激活的页签实现于 app/src/layout/tabUtil.ts支持wndActive参数控制是否仅在活动窗口中查找。getActiveEditor#15641返回当前处于焦点/活动状态的编辑器实例实现见 app/src/plugin/API.ts。查找顺序为优先定位选区所在编辑器其次查找活动窗口内可见编辑器最后wndActive false时按激活时间回溯最活跃页签。hideMessage#15485与既有showMessage配套用于隐藏消息提示实现见 app/src/dialog/message.ts。事件总线switch-protyle-mode#15516新增插件事件总线切换 Protyle 编辑器模式时触发见 app/src/protyle/util/setEditMode.ts事件名已注册进事件类型联合中app/src/types/index.d.ts。生命周期调整#15455addTopBar与addStatusBar从onload生命周期调整到onLayoutReady插件若依赖这两者注册的入口应确保在布局就绪后再初始化相关功能。内核 API 变化exportMdContent与copyStdMarkdown新增imgTag参数#15454控制导出/复制的 Markdown 中图片标签格式。以内核实现 kernel/api/export.go 为例exportMdContent接受id、refMode、embedMode、yfm、fillCSSVar、adjustHeadingLevel、imgTag、addTitle等参数imgTag通过util.BindJsonArg绑定为可选布尔值后传入model.ExportMarkdownContent。路由注册见 kernel/api/router.go。/api/block/getBlockKramdown不再对链接/图片 URL 做空格编码#15611返回的 Markdown 中资源路径保留原始空格减少跨端解析差异。改进/api/filetree/moveDocsByID#15616批量移动文档的内核接口更健壮实现位于 kernel/api/filetree.go路由见 kernel/api/router.go。获取该版本v3.3.0 已随思源笔记官方发布渠道提供下载桌面端安装包与移动端商店版本。如前文所述若使用商店安装的移动端请等待商店上架新版本后再更新桌面端以确保数据库格式兼容。小结v3.3.0 是思源笔记在数据库能力上迈出重要一步的版本按字段分组让数据库视图从表格筛选进化到分组归纳配合汇总字段对模板/时间字段的支持形成了更完整的数据归纳链路同时在编辑器、导出、剪藏与同步层面消除了大量细节问题。对于插件开发者getActiveTab、getActiveEditor、hideMessage、switch-protyle-mode等新 API 进一步补齐了与界面状态交互的能力imgTag参数则让 Markdown 导出更可控。升级时请务必留意多选字段数组化与数据库格式不向下兼容两项变更。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考