连接到 MongoDB 数据源
Overview
数据源表示与应用位于同一项目中的 MongoDB Atlas实例。 您可以使用数据源来存储和检索应用程序的数据。
大多数应用连接到单个数据源,但如果您的数据分布在多个实例中,您可以配置多个数据源。为关联到应用的每个数据源定义一个唯一名称,在整个应用中使用该名称引用相应的数据源。
数据源请求是通过 Atlas App Services 路由的。因此,App Services 自动打开和关闭数据库连接。这意味着,在使用数据源时,您无需担心调用 db.close()
的问题。
注意
后端加密
App Services 与 Atlas 之间的所有内部通信均使用 x509 证书进行加密。
读取、写入和聚合数据
您可以从服务器端函数读写数据源中的数据,或从客户端应用程序连接。使用标准 MongoDB 查询语法编写查询。
exports = async function() { const mongodb = context.services.get("mongodb-atlas"); return mongodb .db("myDatabase") .collection("myCollection") .findOne() }
要了解如何在 Atlas Function 中使用数据源,请参阅以下指南:
要了解如何从 Realm SDK 中使用数据源,请参阅从客户端应用程序中查询 Atlas。
注意
链接的数据源并不支持所有 MongoDB CRUD 和聚合操作。由于模式验证和数据访问规则的开销,在您以特定用户身份查询 MongoDB 时,无法使用某些操作。您可以改为以系统用户身份查询 MongoDB 以绕过一些限制。
有关支持的操作的更多信息,请参阅 CRUD 聚合 API。
保护和验证数据
数据源允许您为它们包含的数据定义访问规则和文档模式。规则动态授权用户读取和写入数据子集,模式控制每个文档的结构和内容。
默认情况下,对关联数据源的读写操作是安全的。除非规则明确允许,否则用户无法读取或写入任何数据。授权用户插入或修改的任何数据必须符合相应的模式。
如果不为集合定义规则,对集合的查询将失败。这意味着,您可以在客户端应用程序中安全地公开正确配置的数据源接口,而不会有数据损坏或泄漏的风险。
自动同步数据
Atlas Device Sync 应用程序存储数据,并将数据更改同步到链接的集群(称为同步的集群)。同步协议确保您的数据最终在所有同步客户端和同步的集群中保持一致。
要了解有关 Atlas Device Sync 及其如何与应用程序数据源交互的更多信息,请参阅 Atlas Device Sync。
注意
Device Sync的数据源要求
要启用Device Sync,您的App Services App必须至少有一个满足以下要求的链接数据源:
运行MongoDB 5.0或更高版本的非分片MongoDB Atlas 群集。
集群不能是无服务器实例或联合数据库实例。 请参阅数据源限制。
对变化的数据做出反应
您可以创建响应数据更改而运行函数的数据库触发器。触发器使用 MongoDB 变更流观察数据源,只要变更事件与触发器配置匹配,就会执行函数。触发器函数可以运行任意代码,并且可以访问变更事件以获取有关导致其运行的变更的详细信息。
要详细了解触发器的工作原理以及如何定义您自己的触发器,请参阅数据库触发器。
重要
触发器仅适用于支持变更流的数据源。无法在联合数据库实例或无服务器 Atlas 实例上定义触发器。
链接数据源
应用程序中配置的数据源链接 到 Atlas 中的底层实例。您可以将多个实例链接到应用程序,甚至创建多个链接到同一底层实例的数据源。
您可以在 App Services 用户界面中配置新的链接数据源,也可以使用 App Services CLI 或 GitHub 部署定义和推送配置文件以进行配置:
链接新的数据源
单击 Link a Data Source,然后在 Data Source Configuration 屏幕上提供以下配置信息:
字段 | 说明 | |
---|---|---|
Data Source | 与您的应用相同的项目所关联的 MongoDB Atlas 集群或联合数据库实例。 | |
App Services Service Name | 连接到数据源的 App Services 服务的名称。在应用程序的其他部分引用数据源时,例如实例化 MongoDB 服务客户端时,应使用此名称。 例子考虑带有 App Services
Service Name
| |
MongoDB Connection String config.wireProtocolEnabled | 对于 Atlas 集群是必填字段。没有为联合数据库实例启用。表示 App Services 是否应允许客户端通过传输协议使用连接字符串连接到此集群的布尔值。 | |
Read Preference | 对于 Atlas 集群是必填字段。不适用于联合数据库实例。指定集群的读取偏好。对于大多数使用案例,默认的读取偏好(主节点)应该足够。 |
添加数据源配置文件
将名为config.json
的文件添加到数据源子目录中。 该文件可以配置MongoDB Atlas 群集或联合数据库实例。
配置文件应具有以下通用格式:
{ "name": "<Service Name>", "type": "mongodb-atlas", "config": { "clusterName": "<Atlas Cluster Name>", "readPreference": "<Read Preference>", "wireProtocolEnabled": <Boolean>, "sync": <Sync Configuration> } }
注意
有关集群配置文件内容的详细信息,请参阅关联的MongoDB集群配置。
{ "name": "<Service Name>", "type": "datalake", "config": { "dataLakeName": "<Federated database instance name>" } }
注意
有关更多信息,请参阅联合数据库实例配置。
数据源限制
关联数据源可以代表多个 MongoDB Atlas 实例类型之一。根据底层实例的类型,并非所有功能都支持。
关联数据源后,无法更改底层实例类型。不过,您可以将新数据源与另一个实例类型建立关联。
Atlas Data Federation
您可以将联合数据库实例作为 MongoDB 数据源链接到应用程序。不过,在使用 Atlas Data Federation 时,需要记住一些注意事项:
无服务器实例
您可以将无服务器实例作为 MongoDB 数据源链接到您的应用程序。不过,无服务器实例目前不支持变更流,因此以下功能受到限制:
您无法在无服务器实例上创建数据库触发器。
您无法将无服务器实例作为应用程序的 Device Sync 集群。
您无法监视作为无服务器 MongoDB Atlas 实例的更改数据源集合。