- 后端
- 数据库
- 文档数据库
【免费下载链接】FerretDB
A truly Open Source MongoDB alternative
本文是一份面向低代码/内部工具开发者的实战指南:以 FerretDB(开源 MongoDB 兼容文档数据库)作为数据后端,通过 ILLA Cloud 的 ILLA Builder 以拖拽组件 + 数据操作(Action)的方式,在几分钟内搭建出管理后台、仪表盘等内部应用。读完本文,你将掌握 ILLA 中 MongoDB 类型资源与 FerretDB 的连接方式、find/aggregate/count等 MongoDB 命令在 ILLA Action 中的用法,以及如何用输入组件实现带参数的动态查询。
为什么是 ILLA Cloud + FerretDB 的组合
FerretDB 是一个开源的 MongoDB 替代品:它作为代理,把 MongoDB 5.0+ 的线协议(wire protocol)查询转换为 SQL,并以 PostgreSQL(配合 DocumentDB 扩展)作为存储引擎,README.md 中对这一架构有完整描述。也就是说,你可以继续使用熟悉的 MongoDB 命令和生态工具,而底层数据落在开源关系型数据库中。
ILLA Cloud 则是一个低代码内部工具平台,通过"资源(Resource)"管理数据源连接,通过"Action"定义对数据源执行的 CRUD 或聚合操作,再通过页面组件把数据可视化。两者结合的价值在于:业务侧不需要任何 MongoDB 服务器,只靠一条连接 URI 就能把 ILLA 的界面能力与 FerretDB 的文档数据能力打通——使用同样的 MongoDB 命令去查询数据、创建看板、管理后台或内部工具。
前置条件
开始之前,你需要准备两样东西:
- FerretDB 连接 URI,形如
mongodb://username:password@127.0.0.1:27017/?authMechanism=PLAIN。URI 由用户名、密码、地址与认证机制组成,FerretDB 的快速启动方式(例如 README.md 中提供的 Docker 一条命令启动)可参考仓库内 website/docs/installation 目录下的安装文档。 - ILLA Cloud 账号,用于登录 ILLA Builder 创建资源与页面。
说明:示例 URI 中的
authMechanism=PLAIN表明使用明文用户名/密码认证。FerretDB 的监听地址默认是127.0.0.1:27017,可通过 cmd/ferretdb/main.go 中的--listen-addr等参数调整。
在 ILLA Builder 中创建 FerretDB 资源
ILLA 的"资源"是一个保存下来的数据源连接配置。创建资源后,数据源就对 ILLA 暴露,你可以在其上运行查询。ILLA 提供多种资源类型连接,包括 PostgreSQL、Supabase、MongoDB 等。
由于 FerretDB 是 MongoDB 的兼容替代品,绝大多数熟悉的 MongoDB 工具和应用都能直接工作。因此,在 ILLA Builder 中为 FerretDB 创建资源时,选择 MongoDB 资源类型即可。
打开连接窗口后,设置资源的名称以及连接字符串 URI:
保存后,资源即创建完成,在资源视图中可以看到该 FerretDB 数据源已就绪,可供后续 Action 使用。
在 ILLA 中创建 Actions
Action 是 ILLA 中对资源执行的操作,比如 CRUD 或聚合操作,同时它也是数据操作与页面组件的桥梁。在 ILLA Builder 中创建 Action 时,可以选择"Action type"(命令类型)、"Collection"(集合)以及"Transformer"(数据转换)。其中 Action type 代表具体的 MongoDB 命令,例如bulkwrite、find、findOne、aggregate、deleteMany、deleteOne、listCollections、count。
这些命令正是 FerretDB 所实现的 MongoDB 命令子集。从源码看,FerretDB 在 internal/handler/commands.go 中集中注册了find、count、aggregate、insert、delete、listCollections等命令及其帮助文本,ILLA 侧可用的 Action type 与之一一对应。
1. 使用find查询全部数据
首先,为 FerretDB 实例中的supply集合创建一个查询全部数据的 Action:
保存并运行该 Action,可以看到查询成功返回结果:
随后,在页面中添加一个 Table 组件,并将其数据源绑定到该 Action 的返回结果:{{query_all_data.data[0].result}}。
提示:在 FerretDB 内部,
find命令由 internal/handler/msg_find.go 中的msgFind处理器实现:它先从请求中解析出数据库名($db),再调用后端执行查询并返回分页结果与游标 ID,最后把游标登记到会话中,供后续getMore分页拉取使用。这与 MongoDB 原生语义保持一致,因此 ILLA 这类客户端无需任何适配。
2. 运行聚合操作
下面是一个聚合操作示例,统计每个地点的交易总数(total transactions per location)。在 ILLA 中,可以把它表达为以下 JSON 管道:
[ { "$group": { "_id": "$customer_location", "totalTransactions": { "$sum": 1 } } }, { "$sort": { "totalTransactions": -1 } } ]该管道先按customer_location字段分组并累加计数,再按交易总数降序排序。
提示:FerretDB 对
aggregate命令的支持同样体现在 internal/handler/msg_aggregate.go 的msgAggregate处理器中,聚合管道会被解析并交由后端执行,结果同样以游标方式返回。关于 FerretDB 聚合管道的更多细节可参考仓库文档 website/docs/usage/aggregations.md。
3. 统计全部文档数
添加一个 Table 组件用于展示集合中的总交易数,然后使用count命令获取总数。运行后,可以用{{count.data}}把结果展示在表格中。
提示:
count命令在 FerretDB 中由 internal/handler/msg_count.go 的msgCount处理器实现:它解析$db后调用CountQuery执行计数并返回结果。与find、aggregate不同,count是直接返回数值结果的命令,无需游标。
完成以上 3 个 Action 后,它们的组合视图大致如下:
4. 使用输入组件进行动态查询
ILLA Cloud 支持在页面中添加文本输入组件,并用输入值实时查询 FerretDB 实例。
操作步骤如下:
- 添加一个 Input 输入框和一个 Button 按钮组件;
- 新建一个 Action,使用
find命令按输入值查询集合,查询条件写成:{"product_category": "{{prod_cat.value}}"}——这里的{{prod_cat.value}}是 ILLA 的模板语法,会动态替换为输入组件prod_cat的当前值; - 为按钮组件添加点击事件处理器,并把该 Action 绑定到点击事件上;
- 最后在页面中添加一个 Table,并把数据源设置为该 Action 的结果。
完成后即可在预览中看到完整的 UI:输入产品分类、点击按钮、表格展示该分类下的查询结果。
深入:FerretDB 如何支撑这些 MongoDB 命令
以上演示中,ILLA 只是充当了 MongoDB 客户端,真正执行命令的是 FerretDB。理解底层实现有助于你排查问题、评估能力边界:
- 命令注册机制:FerretDB 在 internal/handler/commands.go 中通过
initCommands注册全部命令,每个命令对应一个处理器函数。find、count、aggregate等都注册在案,ILLA Action 中选择的命令类型因此可以直接命中。 - 会话与游标:
find与aggregate的处理器都会调用CreateOrUpdateByLSID维护逻辑会话,并把返回的游标 ID 通过AddCursor登记到会话中,这与 MongoDB 的分页机制一致(参见 internal/handler/msg_find.go)。 - 认证与监听:FerretDB 默认开启认证(
--auth默认true),监听127.0.0.1:27017,支持 TLS、Unix socket、HTTP Data API 与 MCP 等接口(参见 cmd/ferretdb/main.go)。这意味着连接 URI 中的认证参数(如authMechanism=PLAIN)会被正确解析,ILLA 可以安全直连。
开始用 ILLA Cloud 处理 FerretDB 数据
任何在 ILLA Cloud 上构建应用的人,都可以直接用 FerretDB 作为内部应用与管理后台的数据后端。借助 ILLA 开箱即用的组件、拖拽式搭建能力和数据库集成,几分钟内即可完成一个可用的内部应用。
FerretDB 的开源属性之外,它还拥有持续增长的社区与维护团队,可以帮助解决 Bug、功能请求与使用疑问。关于 FerretDB 的设计理念与整体理解,可阅读仓库文档 website/docs/introduction.md;关于查询与读取数据的能力,可参考 website/docs/usage/read.md。
若你还需要对 FerretDB 上的数据进行监控与可视化,仓库中还提供了相关博客与文档资源可供继续深入探索。
- 后端
- 数据库
- 文档数据库
【免费下载链接】FerretDB
A truly Open Source MongoDB alternative
相关推荐
使用 Grafana 构建 LLM 应用实时监控看板:从 PostgreSQL 到可视化面板
使用 Grafana 构建 LLM 应用实时监控看板:从 PostgreSQL 到可视化面板 实时监控是任何 RAG 应用上线后的刚需:离线评估无法告诉你真实用
示例工程教程人工智能大模型使用 MongoDB Compass 可视化探索 FerretDB 数据:连接配置与实战指南
使用 MongoDB Compass 可视化探索 FerretDB 数据:连接配置与实战指南 FerretDB 是一款以 PostgreSQL 为后端的开源 M
后端数据库文档数据库Seelen-UI Dock 插件(Weg Plugin)开发指南:渲染、Scopes 与沙箱执行机制详解
Seelen UI Dock 插件(Weg Plugin)开发指南:渲染、Scopes 与沙箱执行机制详解 本文聚焦 Seelen UI 中面向 dock/任务
后端数据库文档数据库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考