公开集合中的数据
Overview
您可以通过 Atlas GraphQL API 将 MongoDB collection中的数据公开给应用程序。Atlas App Services 根据collection模式自动生成 GraphQL 类型和解析程序,并为所有 GraphQL 操作强制执行collection规则。
步骤
1. 为collection配置角色
App Services 会对所有传入的 GraphQL 请求实施collection规则,因此您需要至少定义一个collection角色,并赋予应用程序所需的权限。
所有 GraphQL 请求都包含一个身份验证令牌,用于标识发送请求的 App Services 登录用户。 App Services 会评估 GraphQL 操作中包含的每个文档的角色,并仅返回用户有权查看的字段和文档。如果 App Services 省略了某个字段,则该字段在返回的文档中具有 null
值。
2. 为collection中的文档定义模式
GraphQL 要求所有数据都符合定义明确的类型,因此您必须为集合中的文档定义和实施模式。 Atlas App Services会根据集合模式自动为集合中的文档生成GraphQL类型和解析程序,并在模式发生更改时重新生成新类型。
注意
自动生成模式
App Services 可以根据集合中现有文档的示例为您生成集合架构。如果您没有现有数据,则可以插入一个新文档,该文档具有您想要包含在架构中的字段的模拟实现,然后根据该模拟生成架构。
3. 定义与其他collection的关系
您可以定义关系,将collection中的每个文档与外部collection中的一个或多个文档连接起来。要了解如何定义关系,请参阅定义关系。
关系允许您在 GraphQL 读写操作中流畅地引用和查询相关文档。 例如,您可以查询人员,并包含来自同一people
collection的每个子文档的完整文档:
query { person(query: { name: "Molly Weasley" }) { _id name age picture children { _id name age picture } } }
4. 命名数据类型
App Services 根据collection中的文档符合的数据类型来命名生成的 GraphQL 类型。您可以通过将模式中的title
字段设置为模式定义的数据类型的名称来配置 GraphQL 类型的名称。
您可以在三种情况下设置title
字段:
您可以通过在模式的根级别设置
title
来定义collection中每个文档的类型名称。如果未指定标题,App Services 将使用collection的名称。您可以通过在嵌入式对象模式中设置
title
来定义嵌入式对象的类型名称。您可以通过在字段模式中设置
title
来为具有已定义关系的字段定义类型名称。 App Services 在解析 GraphQL 中的关系时使用title
而不是定义的字段名称。
{ "title": "movie", "properties": { "_id": { "bsonType": "objectId" }, "title": { "bsonType": "string" }, "year": { "bsonType": "int" }, "director": { "bsonType": "int" } } }
注意
单数和复数类型
App Services 为每个集合生成两个GraphQL 查询:
在集合中查找特定文档的单一查询。 查询使用与模式的
title
相同的名称。 如果模式的title
是复数名词, App Services将尝试使用由 Rails ActiveSupport 词形变化规则确定的单数形式。一个复数查询,用于查找collection中所有文档的子集。如果可能,该查询将使用单数查询名称的复数形式。 如果 App Services 无法将名称复数化,或者如果复数名称与单数名称相同,则复数查询将使用与单数查询相同的名称,并在末尾附加
"s"
。
例子
为laboratory.mice
collection配置了以下模式:
{ "title": "Mouse", "bsonType": "object", "properties": { "_id": { "bsonType": "objectId" }, "name": { "bsonType": "string" }, "age": { "bsonType": "int" } } }
App Services 根据以下模式生成两个查询: mouse
(单数)和mice
(复数):
query Mice { mouse(query: { _id: "5ebe6819197003ddb1f74475" }) { name age } mice { name age } }
后续步骤
为集合定义架构后,App Services 会通过 GraphQL API 自动公开集合中的文档。现在,您可以从客户端应用程序进行连接,并执行查询和更改。