共计 7445 个字符,预计需要花费 19 分钟才能阅读完成。
从混乱的书单到井然有序的图书馆
用 Obsidian 做笔记这么久,我一直有个困扰:读过的书越来越多,但书单管理却始终处于混乱状态。豆瓣标记虽然方便,但想查看自己的阅读统计、想给某本书打个特殊标签、想把读书笔记和书籍信息关联起来,就显得力不从心了。之前我尝试过用 Excel 表格、Notion 数据库,甚至用过专门的书籍管理软件,但总觉得和我的笔记系统是割裂的。直到我发现 Obsidian Bases 这个功能,才终于找到了完美的解决方案。
Bases 其实不是一个插件,而是 Obsidian 内置的核心功能,你可以把它理解为 Obsidian 原生的数据库视图。和之前很多人用的 Dataview 插件相比,Bases 最大的优势在于它完全可视化操作,不需要写一行代码,而且速度快到飞起。我之前用 Dataview 的时候,每次打开包含查询的笔记都要等几秒钟,笔记一多就更慢了。换成 Bases 之后,即便是包含上千条记录的视图,也是瞬间加载完成。更重要的是,Bases 可以直接在表格里编辑内容,这种即时反馈的体验真的太爽了。
为什么我需要本地化的图书管理系统
说到图书管理,大多数人第一反应是豆瓣或者 Goodreads 这类在线服务。这些平台确实很成熟,社区氛围也不错,但它们有几个让我不太满意的地方。首先是数据隐私问题,我的阅读记录、笔记内容都存在别人的服务器上,总觉得不够安心。其次是功能限制,豆瓣的标签系统很基础,想要更细致的分类就很难实现。再者是割裂感,我在 Obsidian 里写了大量读书笔记,但书籍信息却在另一个平台,两者之间没法建立真正的联系。
用 Obsidian Bases 管理图书,最大的好处就是一切都在本地,数据完全属于你自己。你可以随意定制字段,想记录什么信息就记录什么,不受平台限制。比如我会记录每本书的购买渠道、阅读耗时、重读次数这些个性化的信息,这在标准化的在线平台上是做不到的。而且因为都在 Obsidian 里,我可以用 [[双向链接]] 把书籍和相关的读书笔记、想法、甚至是引用这本书的其他笔记全部串联起来,形成一个完整的知识网络。这种体验是任何在线书单服务都无法提供的。
我之前也考虑过用 Notion 的数据库功能,但 Notion 始终是个在线服务,数据不在本地就让我有些不放心。而且 Notion 的加载速度在网络不好的时候真的很慢,经常要等半天才能看到内容。相比之下,Obsidian Bases 完全离线运行,打开就能用,响应速度快得多。更重要的是,Obsidian 的笔记都是纯文本的 Markdown 文件,即使哪天不用 Obsidian 了,这些数据也可以轻松迁移到其他工具,不会被锁定在某个平台上。

从零开始搭建图书数据库
说了这么多优点,那具体怎么用 Bases 搭建图书管理系统呢?其实整个过程比你想象的要简单得多。首先你需要确保 Obsidian 已经升级到支持 Bases 的版本,Bases 是从 Obsidian 1.7 版本开始引入的核心功能,所以只要你用的是较新的版本就没问题。在 Obsidian 的设置里,找到「核心插件」,确认 Bases 已经开启,默认情况下它应该是启用状态。
接下来的步骤非常直观。在你想创建图书库的位置,新建一个笔记,比如叫「我的图书馆」。然后在编辑模式下,点击左侧工具栏的「插入 Base」按钮,就会插入一个 Base 视图。刚创建的 Base 是空的,你需要先定义它的数据来源。点击右上角的设置图标,在「Source」选项里选择你想要作为数据库条目的笔记来源。我的做法是创建一个专门的文件夹叫「Books」,然后让 Base 从这个文件夹读取所有笔记,每一篇笔记代表一本书。
定义好数据源之后,就要设计字段结构了。这是整个过程中最关键的一步,因为字段的设计直接决定了你能记录哪些信息、能做哪些筛选和统计。我的图书数据库包含这些字段:书名(text)、作者(text)、出版年份(number)、阅读状态(select,包含「想读」「在读」「读完」三个选项)、我的评分(number,1-10 分)、类型(multi-select,可以同时选择多个标签如「技术」「历史」「小说」等)、购买日期(date)、阅读开始日期(date)、阅读结束日期(date)、页数(number)、阅读笔记(link,链接到具体的读书笔记文件)。这些字段是通过 Obsidian 的 Properties 功能实现的,你只需要在每本书的笔记开头添加 YAML 格式的属性即可,Bases 会自动识别这些属性并显示在表格里。
有了字段之后,你可以根据需要调整列的显示顺序、宽度,甚至可以隐藏某些不常用的列。Bases 的一个贴心设计是支持列的拖拽排序,想把哪个字段放在前面,直接拖过去就行,完全不需要改代码。而且 Bases 会记住你的视图配置,下次打开时会保持你上次的设置,这对于经常查看的数据库来说非常方便。
表格视图与卡片视图的妙用
Bases 提供了两种主要的显示模式:表格视图(Table View)和卡片视图(Card View)。表格视图适合一次性查看大量书籍的详细信息,所有字段都平铺在表格里,方便做批量编辑和数据对比。我平时用表格视图的时候比较多,因为可以快速扫视所有书籍的状态,看看哪些书还在「想读」列表里太久没动,或者找出最近读完的几本书。表格视图还支持内联编辑,也就是直接在单元格里修改内容,改完立即保存,不需要跳转到笔记页面,这个功能在更新阅读进度或调整评分时特别好用。
卡片视图则更适合浏览式的查看体验,每本书会以一张卡片的形式呈现,你可以自定义卡片上显示哪些关键信息。我的卡片视图配置是显示书名、作者、封面图(如果有的话)、阅读状态和评分这几个核心字段。这种布局看起来更像是一个书架,给人一种在实体图书馆里浏览的感觉。当我想要回顾自己读过的书、或者随便翻翻找点灵感的时候,卡片视图的体验就比表格视图舒服很多。而且卡片可以调整大小,可以选择显示为小卡片(一行多个)或大卡片(一行一个),灵活度很高。
两种视图可以在同一个 Base 里随时切换,点击右上角的视图切换按钮就行。更厉害的是,你可以在同一个笔记里创建多个 Base,每个 Base 用不同的筛选条件和视图样式。比如我有一个 Base 专门显示「在读」状态的书,用表格视图方便我跟进阅读进度;另一个 Base 显示所有「读完」且评分在 8 分以上的书,用卡片视图作为「精选书单」。这种灵活性让 Bases 不仅仅是一个数据库工具,更像是一个可以根据需求定制的多维度视图系统。
筛选与排序的实用技巧
管理图书最常见的需求就是筛选和排序,比如想找出所有技术类的书、或者按阅读时间倒序查看最近读的书。Bases 的筛选功能非常强大,点击右上角的漏斗图标,就可以添加筛选条件。筛选支持多种运算符,针对不同类型的字段有不同的选项。比如文本字段可以用「包含」「等于」「不等于」「为空」「不为空」这些条件,数字字段可以用「大于」「小于」「等于」「范围」,日期字段可以用「早于」「晚于」「最近 N 天」,选择字段可以用「是」「不是」「包含任意一个」。
我常用的几个筛选场景:筛选「阅读状态」等于「在读」的书,这样可以快速看到当前正在进行的阅读任务;筛选「类型」包含「技术」且「评分」大于等于 8 的书,用来找优质技术书籍;筛选「阅读结束日期」在最近 30 天内的书,回顾这个月的阅读成果。Bases 支持同时添加多个筛选条件,条件之间默认是「且」的关系,也就是必须同时满足所有条件。虽然目前还不支持复杂的「或」逻辑,但对于大多数使用场景来说,「且」关系已经足够用了。
排序功能同样简单直观,点击列标题就可以对该列进行升序或降序排序,点击一次是升序,再点一次是降序,第三次点击取消排序。你也可以通过右上角的排序按钮添加多级排序,比如先按「阅读状态」排序,再按「阅读结束日期」排序,这样可以把不同状态的书分组显示,每组内部按时间倒序。我最常用的排序方式是按「阅读结束日期」降序,这样最新读完的书会排在最上面,方便我及时补充笔记或更新感想。另外还有一个小技巧,如果你想把某些书固定在列表最上面,可以给它们加一个特殊的标记字段,比如「置顶」,然后把这个字段作为第一排序条件,就能实现置顶效果了。
与读书笔记系统的深度整合
光有书单还不够,真正的价值在于把书籍信息和读书笔记打通。我的做法是为每本重点的书创建一篇专门的读书笔记,笔记的文件名就是书名,然后在书籍数据库里通过链接字段建立关联。具体来说,我在图书 Base 里有一个「阅读笔记」字段,类型设置为 Link,这样可以直接链接到对应的笔记文件。当我在表格里点击某本书的笔记链接时,会直接跳转到那篇读书笔记,非常方便。
更进一步,我会在读书笔记的开头用 Properties 反向链接到书籍信息。比如在读书笔记里添加一个 book: [[某本书]] 属性,这样就形成了双向链接。这种双向关联的好处是,无论从书单还是从笔记出发,都能快速找到另一半信息。而且在 Obsidian 的图谱视图里,你能清楚地看到每本书和它的笔记、以及其他相关笔记之间的连接关系,这种网状的知识结构正是 Zettelkasten 方法的精髓所在。
对于一些特别重要的书,我还会创建多篇笔记。比如一本书的核心观点可能涉及好几个主题,我会为每个主题单独创建一篇笔记,然后都通过标签或链接与原书关联。举个例子,我读《黑天鹅》这本书时,分别创建了「反脆弱性」「随机性」「认知偏差」这几篇主题笔记,每篇都标注了来源是《黑天鹅》,并加上页码引用。这样以后我在写其他笔记时,如果涉及到这些主题,就可以轻松找到相关的知识点和出处。这种细粒度的知识管理方式,只有在笔记系统和书籍管理深度整合的情况下才能实现。
我还发现一个特别有用的场景:在写文章或准备演讲时,可以通过 Bases 快速找到相关书籍。比如我要写一篇关于时间管理的文章,就在图书 Base 里筛选「类型」包含「时间管理」或「效率」的书,然后浏览它们的笔记,提取有用的观点和案例。这比在一堆笔记里盲目搜索要高效得多,因为 Bases 提供了结构化的入口,能快速定位到目标内容。
一些让效率翻倍的小技巧
用了一段时间 Bases 之后,我总结了一些提升效率的小技巧。首先是善用模板功能。我创建了一个「书籍模板」,包含了所有必需的 Properties 字段,每次添加新书时,直接从模板创建笔记,然后填充内容即可。这样可以保证每本书的字段都是一致的,不会遗漏关键信息。Obsidian 的 Templater 插件可以让模板更智能,比如自动填入今天的日期作为添加日期,或者根据书名自动生成文件名。
第二个技巧是利用公式字段做自动统计。虽然 Bases 目前还不像 Notion 那样支持复杂的数据库公式,但你可以用 Dataview 的内联查询在单独的统计笔记里实现类似功能。比如我有一篇「阅读统计」笔记,里面用 Dataview 查询统计了今年读了多少本书、平均评分是多少、哪个类型的书读得最多等等。虽然这些统计不直接显示在 Bases 里,但作为补充视图还是很有用的。期待未来 Obsidian 能给 Bases 加上更多的聚合和计算功能。
第三个技巧是合理使用多选字段。我给书籍添加了一个「主题标签」字段,类型是 Multi-select,可以同时选择多个标签。这比单一分类更灵活,因为很多书会横跨多个领域。比如《人类简史》既可以标记为「历史」,也可以标记为「哲学」「人类学」,这样无论我从哪个角度搜索,都能找到这本书。多选字段在筛选时也很方便,可以用「包含任意一个」或「包含所有」这样的条件,满足不同的查找需求。
第四个技巧是定期维护数据质量。图书管理不是一次性的事情,需要持续更新和整理。我每个月会花半小时检查一遍图书库,把「想读」列表里放了太久的书要么移除、要么提醒自己尽快读,把「在读」状态超过三个月的书检讨一下是不是该放弃了,把已读完但还没补充笔记的书赶紧记录下当时的感受。这种定期维护可以防止数据库变成一个只增不减的垃圾堆,保持它的实用价值。
用 CSS 美化你的图书馆视图
功能强大固然重要,但视觉体验同样不可忽视。用了一段时间 Bases 之后,我发现卡片视图虽然好看,但缺少一些交互反馈,比如鼠标悬浮时没有任何变化,感觉有点呆板。后来我发现 Obsidian 的创始人 kepano 分享了一段 CSS 代码,可以给 Bases 的卡片添加精致的悬浮效果,让整个图书馆的浏览体验提升了一个档次。
这段 CSS 的使用非常简单。首先在 Obsidian 设置里找到「外观」→「CSS 代码片段」,点击文件夹图标打开代码片段目录,然后新建一个 .css 文件,比如叫 bases-hover.css,把 kepano 分享的 CSS 代码 复制进去保存。回到 Obsidian 设置界面,刷新代码片段列表,然后启用这个 CSS 文件就可以了。
启用之后的效果非常棒。当你把鼠标悬浮在卡片视图的某本书上时,卡片会有一个平滑的放大和阴影效果,就像实体书被轻轻拿起来一样。这种微妙的动画反馈不仅让界面看起来更现代,也让你更清楚地知道当前聚焦在哪本书上。配合卡片上的封面图,整个图书馆看起来真的很像一个精心设计的书架。我现在每次打开图书 Base,都忍不住多浏览一会儿,那种感觉就像在逛一家精致的书店。
除了悬浮效果,你还可以根据自己的喜好调整 CSS 代码,比如修改阴影的颜色和强度、调整放大的比例、改变动画的速度等等。虽然我不是专业的前端开发者,但通过简单地修改 CSS 里的数值,也能调出自己满意的效果。这种可定制性正是 Obsidian 的魅力所在,它不会限制你只能用官方提供的样式,而是给了你完全的自由度,让你可以打造真正属于自己的图书馆。
/* Hardcover book cover effect for card views in Obsidian Bases */
.bases-view {
--bases-cards-background: transparent;
--bases-cards-cover-background: transparent;
--bases-cards-shadow: none;
--bases-cards-shadow-hover: none;
}
.bases-cards-group {
gap: 20px;
padding: 20px;
}
.bases-cards-label {
display: none;
}
.bases-cards-item {
overflow: visible;
gap: 0px;
contain: inherit;
}
.bases-cards-property.mod-title {
padding-top: 10px;
}
/* Book shadow */
.bases-cards-cover {
transition: transform 0.1s ease-out, box-shadow 0.1s ease-out;
border-radius: 2px 6px 6px 2px;
box-shadow: inset 1px 1px 0 1px rgba(255,255,255,0.2), inset 0 0 0 1px rgba(0,0,0,0.1), -4px 2px 4px 0 rgba(0,0,0,0.3), -8px 8px 20px 0 rgba(0,0,0,0.2);
}
/* Book spine effect */
.bases-cards-cover:before {
content: "";
background-image: linear-gradient(to right, rgba(0,0,0,0.2), rgba(255,255,255,0.3) 1%, transparent 6%, rgba(0,0,0,0.15) 8%, rgba(255,255,255,0.2) 9%, transparent 20%);
width: 100%;
position: absolute;
height: 100%;
}
.bases-cards-item:hover .bases-cards-cover {
transform: translateY(-4px) scale(1.03);
box-shadow: inset 1px 1px 0 1px rgba(255,255,255,0.2), inset 0 0 0 1px rgba(0,0,0,0.1), -4px 4px 8px 0 rgba(0,0,0,0.3), -12px 16px 30px 0 rgba(0,0,0,0.3);
}
/* Show title on two lines */
.bases-cards-property.mod-title .bases-cards-line {
font-size: var(--font-ui-small);
line-height: 1.2;
height: 2.8em;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
最后
从混乱的书单到井然有序的个人图书馆,Obsidian Bases 给了我一个完美的解决方案。它不仅让我能够系统地管理读过的书、想读的书,更重要的是把书籍信息和我的知识体系深度整合在一起。每本书不再是孤立的条目,而是成为知识网络中的一个节点,通过双向链接与无数想法、笔记相连。这种有机的结合方式,让阅读这件事变得更有意义,也让知识的积累变得更有体系。
如果你也在用 Obsidian 做笔记,也苦恼于书籍管理的问题,不妨试试 Bases。它的学习曲线很平缓,不需要懂代码,稍微摸索一下就能上手。而且因为是核心功能,不用担心插件失效或不兼容的问题,可以放心长期使用。从我的经验来看,投入一两个小时搭建好基础框架,之后每添加一本书也就几分钟的事,但带来的价值是长期的。当你能随时查看自己的阅读轨迹、快速找到任何一本书的笔记、甚至通过数据分析了解自己的阅读偏好时,你会发现这点时间投入是完全值得的。
对我来说,Obsidian Bases 不只是一个工具,它改变了我对阅读和知识管理的理解。它让我意识到,好的工具应该是无形的,应该自然地融入你的工作流程,而不是成为额外的负担。现在我每读完一本书,第一件事就是在 Bases 里更新状态、补充笔记链接,这已经成为一种习惯。而这个习惯带来的回报,是一个越来越丰富、越来越有价值的个人知识库。如果你还在为书籍管理发愁,真的可以试试看。
参考资料

