MongoDB 数据源配置文件
app/ └── data_sources/ └── <service name>/ ├── config.json └── <database>/ └── <collection>/ ├── schema.json ├── relationships.json └── rules.json
服务配置
MongoDB 集群
{ "name": "<Service Name>", "type": "mongodb-atlas", "config": { "clusterName": "<Atlas Cluster Name>", "readPreference": "<Read Preference>", "wireProtocolEnabled": <Boolean> } }
字段 | 说明 |
---|---|
name string | 必需。默认: 用于引用此 Atlas App Services App 中的集群的服务名称。名称最长可以有 64 个字符,并且只能包含 ASCII 字母、数字、下划线和连字符。 |
type string | 必需。 对于 MongoDB Atlas 集群,此值始终为 "mongodb-atlas" 。 |
config.clusterName string | 必需。 Atlas 中集群的名称。 |
config.readPreference string | 通过服务发送的查询的读取偏好(read preference)模式。 |
config.wireProtocolEnabled Boolean | 如果 true ,则客户端可以通过 MongoDB 传输协议连接到应用。 |
联合数据库实例
{ "name": "<Service Name>", "type": "datalake", "config": { "dataLakeName": "<Federated database instance name>" } }
字段 | 说明 |
---|---|
name string | 必需。默认: 用于引用此 App Services App 中的联合数据库实例的服务名称。名称最长可以有 64 个字符,并且只能包含 ASCII 字母、数字、下划线和连字符。 |
type string | 必需。 对于联合数据库实例,此值始终为 "datalake" 。 |
config.dataLakeName string | 必需。 Atlas 中联合数据库实例的名称。 |
数据库和collection
collection模式
如果要为collection实施schema,请定义一个包含文档的 JSON schema 的schema.json
文件。根级模式必须是对象模式,其形式如下:
{ "title": "<Object Type Name>", "bsonType": "object", "properties": { "<Property Name>": { <Schema> }, ... } }
关系
{ "<Source Field Name>": { "ref": "#/relationship/<Data Source Name>/<Database Name>/<Collection Name>", "source_key": "<Source Field Name>", "foreign_key": "<Foreign Field Name>", "is_list": <Boolean> }, ... }
字段 | 说明 | |
---|---|---|
ref string | JSON schema
| |
source_key string | 此集合模式中的字段名称,用于指定关系中包含的外部集合中的哪些文档。 如果 source_key 包含其foreign_key 字段的值,则包含外部文档。 | |
foreign_key string | 外部集合模式中包含 source_key 引用的值的字段的名称。 | |
is_list Boolean | 如果为 如果为 |
例子
电子商务应用程序定义两个collection之间的关系: store.orders
中的每个文档通过在订单的items
数组中包含商品_id
值来引用store.items
collection中的一个或多个文档。这两个collection位于同一关联集群 ( mongodb-atlas
) 和数据库 ( store
)。
该关系是为orders
collection定义的:
{ "items": { "ref": "#/relationship/mongodb-atlas/store/items", "source_key": "items", "foreign_key": "_id", "is_list": true } }
默认规则
您可以定义默认规则,应用于数据源中未定义更具体的集合级规则的所有集合。
您可以在数据源的default_rule.json
配置文件(位于data_sources/<data-source-name>/default_rule.json
中定义默认规则。
{ "roles": [<Role>], "filters": [<Filter>] }
collection规则
如果数据源不是“联合”数据源,则可以在collection的rules.json
配置文件中定义collection级规则。
{ "database": "<Database Name>", "collection": "<Collection Name>", "roles": [<Role>], "filters": [<Filter>] }
规则配置
角色
{ "name": "<Role Name>", "apply_when": { Expression }, "document_filters": { "read": { Expression }, "write": { Expression } }, "read": { Expression }, "write": { Expression }, "insert": { Expression }, "delete": { Expression }, "search": <Boolean>, "fields": { "<Field Name>": { "read": { Expression }, "write": { Expression }, "fields": { Embedded Fields } }, ... }, "additional_fields": { "read": { Expression }, "write": { Expression } } }
字段 | 说明 | ||||||||
---|---|---|---|---|---|---|---|---|---|
name string | 角色的名称。角色名称用于识别和区分同一集合中的角色。限制在 100 个字符以内。 | ||||||||
apply_when object | 一个表达式,当该角色应用于用户时,该表达式的计算结果为 true。 当未启用 Device Sync(灵活模式)时,App Services 根据每个文档分配角色。当启用 Device Sync(灵活模式)时,App Services 根据每个集合、每个会话分配角色 — 也就是说,当客户端打开同步连接时,它为每个同步集合分配角色。 为分配角色,App Services 会对每个潜在角色的 如果启用 Device Sync(灵活模式),则分配的角色必须是Sync 兼容的。 如果该角色与同步不兼容,但其 | ||||||||
document_filters Document Default: undefined | 具有读取和写入表达式的文档,这些表达式决定是否可以评估角色的其他权限。 如果启用了 Device Sync,则必须同时定义 如果未启用 Device Sync,则
| ||||||||
document_filters.read object? Default: undefined | |||||||||
document_filters.write object? Default: undefined | |||||||||
read object? Default: undefined | |||||||||
write object? Default: undefined | 如果角色有权添加、修改或删除文档中的所有字段,则该表达式的计算结果为 true。 为了保持Sync 兼容性,表达式必须是布尔值字面量( 文档级写入权限具有优先级超过任何字段级权限。如果角色具有文档级 要与字段级规则一起定义默认回退,请保留 您可以在 重要隐式读取权限每当角色拥有特定范围的 | ||||||||
insert object? Default: true | 如果角色有权将新文档插入到collection中,则表达式的计算结果为 App Services 仅在插入操作中评估此表达式的值,并且仅在确定该角色对新文档中的所有字段都具有 | ||||||||
delete object? Default: true | 如果角色有权从collection中删除文档,则该表达式的计算结果为 true。 App Services 仅在删除操作中评估此表达式的值,并且仅在确定该角色对要删除的文档中的所有字段都具有 | ||||||||
search Boolean Default: true | 如果角色有权使用Atlas Search Atlas SearchAtlas Search 集合,则 表达式 的计算结果为 true 重要App Services 以系统用户身份执行 | ||||||||
fields Document Default: {} | 一种文档,其中每个键对应一个字段名称,每个值都定义角色对查询文档中相应字段的字段级 为了保持Sync 兼容性,内部的
注意权限优先级文档级 | ||||||||
fields.<Field Name>.read object? Default: false | |||||||||
fields.<Field Name>.write object? Default: false | |||||||||
fields.<Field Name>.fields Document Default: {} | 一个 有关更多信息,请参阅“嵌入式文档的字段级权限”角色模式。 | ||||||||
additional_fields Document Default: {} | 针对查询文档中在 为了保持Sync 兼容性,内部的
| ||||||||
additional_fields.read object? Default: false | |||||||||
additional_fields.write object? Default: false |
筛选器
{ "name": "<Filter Name>", "apply_when": { Expression }, "query": { MongoDB Query }, "projection": { MongoDB Projection } }
字段 | 说明 | |
---|---|---|
name string | 必需。过滤器的名称。过滤器名称用于识别和区分过滤器。限制在 100 个字符以内。 | |
apply_when object | 一个表达式,用于确定此筛选器何时应用于传入的 MongoDB 操作。 重要Atlas App Services 将在读取任何文档之前评估并应用过滤器,因此您无法在过滤器的 “Apply When” 表达式中使用 MongoDB 文档扩展。但是,您也可以使用其他扩展,如 | |
query object Default: {} | 一个MongoDB查询, Atlas App Services将其合并到已筛选操作的现有查询中。 例子筛选器使用以下查询保留
| |
projection object Default: {} | 一种MongoDB投影, Atlas App Services将其合并到已筛选操作的现有投影中。 重要投影冲突MongoDB 投影可以是包含式的或排除式的,即可以仅返回指定的字段,或者不返回未指定的字段。如果多个过滤器应用于查询,这些过滤器必须全部指定相同类型的投影,否则查询会失败。 例子过滤器使用以下投影从所有文档中保留
|