Ohhnews

分类导航

$ cd ..
foojay原文

使用MongoDB临时集群构建你的第一个SaaS应用

#mongodb#临时集群#saas#spring boot#ai编程助手

这是一个全新的时代。一个曾经需要数小时甚至数天才能搭建好的原型,如今几分钟内就能启动并运行。只需一次 API 调用,AI 代理就能直接从你的 IDE 创建一个 MongoDB Atlas 集群,这样你就可以立即投入构建,而不必停下来去处理账户设置、云服务商选择、区域或集群配置。

在本教程中,你将使用 Atlas Ephemeral Cluster 来构建一个精致的求职申请追踪器:一个小型 SaaS,用户可以在看板上管理申请。这个应用刻意做得简单。重点在于工作流:立即为代理提供一个真实的数据库,快速验证一个想法,并在原型值得保留时认领该集群。

[LOADING...]

你将学到什么

  • 什么是 Atlas Ephemeral Cluster,以及何时使用它
  • 代理如何通过一次 API 调用配置数据库
  • 如何将返回的连接详情交给代理,并构建一个全栈 SaaS
  • 当原型值得保留时,如何在 Atlas 中认领该集群

为什么要使用临时集群?

早期阶段构建的重点是学习,而不是基础设施决策。在验证一个想法之前,就去决定所有的数据库需求、使用哪家云服务商,或者一般情况下如何运维,通常都为时过早。这些决策会打断从想法到可用产品之间的创作循环。

MongoDB Atlas Ephemeral Clusters(目前处于公开预览阶段)消除了这种中断。它们是通过一个无需身份验证的 API 端点创建的临时、免费的 Atlas M0 集群。响应中包含一个带有受限权限凭证的实时连接字符串,以及一个认领 URL,让人或代理可以立即开始构建。当原型具有价值时,你可以将该集群认领到你的 MongoDB Atlas 组织中。

临时集群会保持活跃 48 小时,并且可以在创建后的 7 天内被认领,之后就会被清理。请把它当作一个用于实验和原型的快速、一次性的环境,而不是生产部署。

工作流一览

  1. 配置一个临时集群。
  2. 将连接详情交给你的编程代理。
  3. 构建并测试最小可用的 SaaS 工作流。
  4. 如果你想保留原型,就认领该集群。
  5. 在 Atlas 中继续构建,拥有正常的归属权和控制权。

前置条件

  • 用于配置调用的 curl
  • 一个能够创建文件并运行你的应用的 AI 编程代理或 IDE 助手
  • 后端需要 Java 21+ 和 Maven
  • React 前端需要 Node.js
  • 只有在准备认领集群时才需要浏览器

你不需要 Atlas 账户即可开始临时集群工作流。

1. 配置集群(可选步骤)

对于本教程来说,这一步是可选的,因为我们可以直接让代理来配置集群,但了解一下如何让你的临时集群正常运行是很有好处的。从终端运行此请求,或者指示你的代理运行它并安全地存储响应。

curl -sS -X POST 'https://cloud.mongodb.com/api/atlas/v2/unauth/ephemeralClusters:create' \
  -H 'Accept: application/vnd.atlas.preview+json' \
  -H 'Content-Type: application/json' \
  -d '{"clusterName": "Cluster0"}'

你得到的响应应该类似这样:

{
  "claimUrl": "https://account.mongodb.com/account/register?claimId={claimId}",
  "clusterId": "{clusterId}",
  "connectionString": "mongodb+srv://{username}:{password}@{host}/",
  "expiresAt": "{timestamp}",
  "status": "PROVISIONING",
  "termsOfService": "By using this API and any resources provisioned through it, you agree to be bound by MongoDB's Cloud Terms of Service at https://www.mongodb.com/legal/terms-and-conditions/cloud; and Privacy Policy at https://www.mongodb.com/legal/privacy/privacy-policy."
}

此请求不需要登录流程。将响应保存到你的代理可以在本地访问的地方,但永远不要将它提交到源代码管理中:connectionString 字段包含你的应用开始构建所需的凭证,而 claimUrl 让你之后可以将临时集群转换为永久的 Atlas 集群。

它还提供了一些重要信息,包括临时集群何时过期(expiresAt)、clusterId、集群的状态,以及这些集群的服务条款。

2. 将数据库交给你的代理

创建集群只是工作流的前半部分。下一步是为你的编程代理提供一条清晰、安全的路径,从临时集群的响应通向一个正在运行的应用。

下面,我提供了一个详细的提示词,供我的代理在构建应用时使用。它定义了架构、功能需求、数据模型、开发边界以及工作顺序。在一开始就明确表达可以减少代理猜测的空间,也意味着当文件、依赖项和 API 契约都已经存在时,需要的方向纠偏会更少。

我还会给出关于如何设置 MongoDB Ephemeral Cluster 以及如何处理返回结果的详细说明。配置响应包含两条承担不同职责的信息:

  • connectionString 是临时的数据库连接字符串。你的代理用它来配置 Spring Boot 后端,使 API 从第一次运行起就能创建集合、插入示例数据并持久化应用更改。
  • claimUrl 是给你用的,不是给应用用的。将它保存在安全的地方;它就是你在之后将成功原型迁移到你的 Atlas 组织时会用到的链接。

不要将这两个值粘贴到源文件中。相反,让代理把 MONGODB_URI 放入本地的 .env 文件或你的 shell 环境中,将该文件添加到 ../../../../../../.gitignore,并提交一个只包含变量名的 .env.example。这样既能保持生成项目可复现,又不会暴露授予临时集群访问权限的凭证。

将以下提示词复制到你的编程代理中。它告诉代理在编写应用代码之前先配置集群、检查响应、保留认领 URL,并仅通过 MONGODB_URI 使用连接字符串。

使用此提示词来生成用于追踪求职申请的 Spring、React + Vite 和 MongoDB 应用:

I want to build a full-stack SaaS job application tracker using Java 21+, Spring Boot,
Spring Web, Spring Data MongoDB, Maven, MongoDB, React with Vite, JavaScript, and
Tailwind CSS.

## Database provisioning

Before writing any application code, provision a MongoDB Atlas database using the
MongoDB Atlas Ephemeral Clusters feature for AI prototyping. Run:

curl -sS -X POST 'https://cloud.mongodb.com/api/atlas/v2/unauth/ephemeralClusters:create' \
  -H 'Accept: application/vnd.atlas.preview+json' \
  -H 'Content-Type: application/json' \
  -d '{"clusterName": "Cluster0"}'

This endpoint returns JSON containing the MongoDB Atlas connection string to use for
prototyping, a claim URL for converting the cluster to a permanent free Atlas cluster,
an expiry date for an unclaimed cluster, terms of service, and other metadata.

Walk me through the returned information, store the connection details securely for
later, and use the returned connection string as MONGODB_URI. Do not commit credentials
or the response payload to source control. Only after the database is provisioned,
create the application described below.

## Application

Create a simple, polished SaaS interface where a user can track job applications.

Each application should contain:
* Company
* Role
* Location
* Status: Saved, Applied, Interview, Offer, or Rejected
* Salary range and currency
* Job URL
* Notes
* Tags
* Applied date

The main page should show applications as a Kanban board with columns for each status.
Users should be able to create, edit, delete, search, filter, and change the status of
applications.

At the top, show simple statistics for total applications, interviews, offers, and
interview rate.

Use a Spring Boot REST API with a straightforward controller -> service -> repository
structure. Use Spring Data MongoDB, DTOs for API requests/responses, validation, and
sensible error handling. Store salary as a nested document and tags as an array.

Use MONGODB_URI for the MongoDB connection. The frontend should run on port 5173 and
the backend on 8080.

Keep the UI modern, clean, responsive, and similar to a small developer-focused SaaS
product.

Keep the application deliberately simple. Do not add authentication, payments, AI,
microservices, Kafka, Redux, GraphQL, or unnecessary abstractions.

Structure the project as:
backend/ — Spring Boot application
frontend/ — React application

Include some sample job applications for development and a README explaining how to
run the project.

当代理完成项目生成后,在将要运行后端的终端会话中设置连接字符串。Spring Boot 在启动时读取 MONGODB_URI;这就是将生成的 API 连接到临时集群(而不是本地数据库)的方式。

# Terminal 1: backend
cd backend
export MONGODB_URI='paste-the-ephemeral-connection-string-here'
./mvnw spring-boot:run

保持该终端运行,然后打开第二个终端用于前端:

# Terminal 2: frontend
cd frontend
npm install
npm run dev

前端运行在 http://localhost:5173,并调用运行在 http://localhost:8080 的后端。代理应相应地配置本地开发体验,包括任何所需的 CORS 设置。这个提示词对产品的要求刻意精确,而对基础设施则刻意轻描淡写:代理可以创建集合、REST API、看板 UI 和示例数据,而临时集群从第一次运行起就提供了一个实时的持久化层。

3. 代理应该构建什么

该应用只需要一个主集合:applications。每个文档代表一份求职申请,并应捕获 UI 所需的字段,而不需要不必要的连接或服务。

{
  "_id": "...",
  "company": "MongoDB",
  "role": "Developer Advocate",
  "location": "London, UK",
  "status": "Interview",
  "salary": {
    "min": 85000,
    "max": 105000,
    "currency": "GBP"
  },
  "jobUrl": "https://example.com/jobs/developer-advocate",
  "notes": "Technical screen scheduled for next Tuesday.",
  "tags": ["developer-relations", "hybrid"],
  "appliedDate": "2026-09-01",
  "createdAt": "...",
  "updatedAt": "..."
}

而在临时集群中,我们甚至可以要求代理添加能够反映应用最常见查询的索引:

@Document("applications")
@CompoundIndex(name = "status_applied_date_idx", def = "{'status': 1, 'appliedDate': -1}")
public class JobApplication {
    // fields omitted
}

对于第一个原型来说,这个模型为代理提供了看板视图、文本搜索和过滤、状态移动以及顶部统计数据所需的一切。它还展示了一种有用的文档建模模式:本应属于一起的值,例如薪资范围和其货币,作为嵌套文档放在一起;标签则自然地以数组形式工作。

4. 运行并验证原型

你的代理的 README 应该提供确切的命令,但开发工作流应该很简单:

# Terminal 1: backend
cd backend
export MONGODB_URI='paste-the-ephemeral-connection-string-here'
./mvnw spring-boot:run

# Terminal 2: frontend
cd frontend
npm install
npm run dev

在 http://localhost:5173 打开前端。API 应运行在 http://localhost:8080。

[LOADING...]

演练核心工作流:

  1. 确认已预置的示例申请出现在它们对应的看板列中。
  2. 创建一份带有薪资范围和几个标签的申请。
  3. 将它从 Saved 移到 Applied,再移到 Interview。
  4. 按公司搜索,并按状态或标签过滤。
  5. 编辑它的备注,然后删除它。
  6. 确认总数、面试数、Offer 数和面试率统计数据正确更新。

[LOADING...]

在这个阶段,临时集群已经完成了它的使命:它让你拥有一个真实、持久化的原型,而无需提前投入基础设施工作。在学习循环仍然快速的时候,继续迭代构建提示词、数据模型、REST 端点和 UI。

5. 当想法值得时认领集群

当原型值得保留时,打开配置响应返回的认领 URL。完成 Atlas 流程,将该集群附加到你的 Atlas 组织。认领就是从实验性资源交接为可以作为你 Atlas 资产的一部分来管理的数据库。如果之前保存了,你可以要求代理提供它:

show claim URL in previous API response

它就在用于创建临时集群的原始响应的 claimUrl 字段中:

{
  "claimUrl": "https://account-dev.mongodb.com/account/register?claimId=claimId",
  "clusterId": "clusterId",
  "connectionString": "mongodb+srv://POexample:[email protected]/",
  "expiresAt": "2026-09-05T13:21:35Z",
  "status": "ACTIVE",
  "termsOfService": "By using this API and any resources provisioned through it, you agree to be bound by MongoDB's Cloud Terms of Service at https://www.mongodb.com/legal/terms-and-conditions/cloud; and Privacy Policy at https://www.mongodb.com/legal/privacy/privacy-policy."
}

通过访问该链接,你将被要求登录或创建一个 MongoDB Atlas 账户。登录后,你会被带到一个页面,决定要将集群添加到哪个组织,并配置网络连接的允许列表。

[LOADING...]

之后,就是认领集群的时候了!

[LOADING...]

说了这么多、做了这么多之后,临时集群现在就是一个标准集群了,可以像任何其他 MongoDB 集群一样与之交互、升级和配置。

[LOADING...]

在认领之前,请确保你清楚连接字符串在何处被使用,并从日志、截图、聊天记录或源代码管理中删除意外留下的副本。认领之后,更新应用的配置,使用适合你正在创建的环境的连接详情和访问控制。

临时集群适合用在哪里

当你需要以下情况时,可以使用临时集群:

  • 立即为 AI 代理提供一个真实的 MongoDB 数据库
  • 为一个新的 SaaS 工作流、演示、黑客松项目或概念验证做原型
  • 在投入更长期的环境之前,测试文档模型和查询模式
  • 让开发者留在 IDE 中,而不是让他们去经历各种设置界面

当你需要一个持久的环境、生产级的运维控制、选定的配置,或者一个生命周期超过临时集群的工作负载时,请使用常规的 Atlas 部署。## 要点

临时集群(Ephemeral Clusters)将数据库配置从早期产品工作的关键路径中移出。与其因为一个想法而中断手头工作,去创建账户、选择基础设施、配置部署,并在不同工具之间复制凭据,你可以给智能体一条指令:创建数据库,安全地保留连接详细信息,并立即基于它构建。

这改变了首次构建体验。你的智能体可以生成 Spring Boot API,通过 MONGODB_URI 连接它,创建 MongoDB 文档模型,填充真实感数据,并交付一个可将更改持久化到实时 Atlas 集群的 React 界面。你可以继续专注于有用的问题:工作流是否合理,数据模型是否站得住脚,以及这个产品是否值得继续做下去?

该集群有意设计为临时性的,这让实验几乎没有阻力。自由地进行原型设计,丢弃行不通的部分,避免把尚未验证的想法当作生产系统来对待。当应用程序值得再进行一轮迭代时,打开保存的 claimUrl,将该集群纳入你的 Atlas 组织。到那时,基础设施决策会成为有意的下一步,而不是开始工作的代价。

从一个 API 调用开始。从第一个提示开始就用真实数据库构建。当想法证明它值得继续存在时,认领该集群。

此应用程序的完整代码可在 GitHub 仓库 中获取。

作者:Tim Kelly
MongoDB 开发者关系倡导者