Docs Menu
Docs Home
/ /
Archivos de configuración de la aplicación

Archivos de configuración de fuentes de datos de MongoDB

app/
└── data_sources/
└── <service name>/
├── config.json
└── <database>/
└── <collection>/
├── schema.json
├── relationships.json
└── rules.json
config.json
{
"name": "<Service Name>",
"type": "mongodb-atlas",
"config": {
"clusterName": "<Atlas Cluster Name>",
"readPreference": "<Read Preference>",
"wireProtocolEnabled": <Boolean>
}
}
Campo
Descripción
name
string

Obligatorio. Predeterminado: mongodb-atlas

El nombre del servicio utilizado para referirse al clúster dentro de esta aplicación Atlas App Services. El nombre puede tener un máximo de 64 caracteres y solo debe contener letras ASCII, números, guiones bajos y guiones.

type
string

Obligatorio. Para los clústeres de MongoDB Atlas, este valor siempre es "mongodb-atlas".

config.clusterName
string

Obligatorio. El nombre del clúster en Atlas.

config.readPreference
string

El modo de preferencia de lectura para las consultas enviadas a través del servicio.

Modo
Descripción

primario

App Services dirige todas las operaciones de lectura al nodo principal del conjunto de réplicas actual. Este es el modo de preferencia de lectura predeterminado.

App Services dirige todas las operaciones de lectura al nodo principal del conjunto de réplicas actual, si está disponible. Si el nodo principal no está disponible, como durante una conmutación por error automática, las solicitudes de lectura se dirigen a un nodo secundario.

App Services dirige todas las operaciones de lectura a uno de los nodos secundarios del conjunto de réplicas actual.

App Services dirige todas las operaciones de lectura a uno de los nodos secundarios disponibles en el set de réplicas. Si no hay nodos secundarios disponibles, las solicitudes de lectura se dirigen al primario del set de réplicas.

App Services dirige las operaciones de lectura al miembro del conjunto de réplicas que tiene la latencia de red más baja en relación con el cliente.

config.wireProtocolEnabled
Boolean
/data_sources/<Service Name>/config.json
{
"name": "<Service Name>",
"type": "datalake",
"config": {
"dataLakeName": "<Federated database instance name>"
}
}
Campo
Descripción
name
string

Obligatorio. Predeterminado: mongodb-datafederation

El nombre del servicio utilizado para referirse a la instancia de base de datos federada dentro de esta aplicación de Servicios de Aplicaciones. El nombre puede tener un máximo de 64 caracteres y solo debe contener letras ASCII, números, guiones bajos y guiones.

type
string

Obligatorio. Para una instancia de base de datos federada, este valor siempre es "datalake".

config.dataLakeName
string

Obligatorio. El nombre de la instancia de base de datos federada en Atlas.

Si desea aplicar un esquema a una colección, defina un schema.json archivo de configuración que contenga un esquema JSON para los documentos. El esquema de nivel raíz debe ser un esquema de objeto, con el siguiente formato:

/data_sources/<data source>/<database>/<collection>/schema.json
{
"title": "<Object Type Name>",
"bsonType": "object",
"properties": {
"<Property Name>": { <Schema> },
...
}
}
/data_sources/<data source>/<database><collection>/<colección>/relaciones.json
{
"<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>
},
...
}
Campo
Descripción
ref
string

Una cadena $ref de esquema JSON que especifica la colección externa. La cadena tiene el siguiente formato:

#/relationship/<Data Source Name>/<Database Name>/<Collection Name>
source_key
string

El nombre del campo en el esquema de esta colección que especifica qué documentos de la colección externa se incluirán en la relación. Se incluye un documento externo si source_key contiene el valor de su campo foreign_key.

foreign_key
string

El nombre del campo en el esquema de la colección externa que contiene el valor al que hace referencia source_key.

is_list
Boolean

Si es true, la relación puede referirse a varios documentos externos (es decir, una relación "a varios"). El campo source_key debe ser una matriz con elementos del mismo tipo que el campo foreign_key.

Si es false, la relación puede referirse a uno o ninguno de los documentos extranjeros (es decir, una relación "a uno"). El campo source_key debe ser del mismo tipo que el campo foreign_key.

Ejemplo

Una aplicación de comercio electrónico define una relación entre dos colecciones: cada documento de store.orders hace referencia a uno o más documentos de la colección store.items al incluir los valores del artículo _id en la matriz items del pedido. Ambas colecciones se encuentran en el mismo clúster vinculado (mongodb-atlas) y base de datos (store).

La relación se define para la colección orders:

/fuentes_de_datos/mongodb-atlas/tienda/pedidos/relaciones.json
{
"items": {
"ref": "#/relationship/mongodb-atlas/store/items",
"source_key": "items",
"foreign_key": "_id",
"is_list": true
}
}

Puede definir reglas predeterminadas que se apliquen a todas las colecciones de una fuente de datos que no tengan reglas de nivel de colección más específicas definidas.

Defina reglas por defecto en el archivo de configuración default_rule.json de la fuente de datos en data_sources/<data-source-name>/default_rule.json.

/data_sources/<data source>/default_rule.json
{
"roles": [<Role>],
"filters": [<Filter>]
}
Campo
Descripción
roles
Array<Role>

Una variedad de configuraciones de roles.

filters
Array<Filter>

Una matriz de configuraciones de filtro.

Si la fuente de datos no es una fuente de datos federada, puede definir reglas a nivel de colección en el rules.json archivo de configuración de una colección.

/data_sources/<data source>/<database><collection>/<colección>/rules.json
{
"database": "<Database Name>",
"collection": "<Collection Name>",
"roles": [<Role>],
"filters": [<Filter>]
}
Campo
Descripción
database
string

El nombre de la base de datos que contiene la colección.

collection
string

El nombre de la colección.

roles
Role[]

Una variedad de configuraciones de roles.

filters
Filter[]

Una matriz de configuraciones de filtro.

{
"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 }
}
}
Campo
Descripción
name
string

El nombre del rol. Los nombres de rol identifican y distinguen entre roles de la misma colección. Limitado a 100 caracteres o menos.

apply_when
object

Una expresión que se evalúa como verdadera cuando este rol se aplica a un usuario.

Cuando la Sincronización de Dispositivos (Modo Flexible) no está habilitada, App Services asigna un rol por documento. Cuando la Sincronización de Dispositivos (Modo Flexible) está habilitada, App Services asigna roles por colección y por sesión; es decir, por cada colección sincronizada cuando un cliente abre una conexión de sincronización.

Para asignar un rol, App Services evalúa el apply_when de cada rol potencial hasta que uno se evalúa como verdadero. Los roles potenciales son cualquier rol especificado en el rules.json archivo de configuración para la colección dada o, si no rules.json se encuentra ningún archivo para la colección dada, los roles predeterminados. App Services evalúa los roles en el orden en que los especifique en su configuración. Si ningún rol coincide, se deniega el acceso. Para obtener más información, consulte Permisos basados ​​en roles.

Si la sincronización de dispositivos (modo flexible) está habilitada, los roles asignados deben ser compatibles con la sincronización. Si el rol no es compatible con la sincronización, pero su apply_when valor es verdadero, no se consideran los demás roles y se deniega el acceso.

document_filters
Document
Default: undefined

Un documento con expresiones de lectura y escritura que determinan si se pueden evaluar otros permisos del rol.

Si la sincronización de dispositivos está habilitada,document_filters.read document_filters.write se deben definir y para que el rol sea compatible con la sincronización. Los roles incompatibles con la sincronización deniegan todo acceso a las solicitudes de sincronización.

Si la sincronización del dispositivo no está habilitada, document_filters, document_filters.read y document_filters.write son todos opcionales; un document_filters.read o document_filters.write no definido tiene como valor predeterminado verdadero, lo que permite evaluar los permisos posteriores.

"document_filters": {
"read": { Expression },
"write": { Expression }
}
document_filters.read
object?
Default: undefined

Una expresión que especifica read fields additional_fields si se pueden evaluar los permisos de lectura de, y. Si es falso (y document_filters.write no está definido o es falso), se deniega el acceso de lectura para todo el documento.

Para mantener la compatibilidad de Sync, la expresión debe estar definida y solo puede hacer referencia a campos consultables.

document_filters.write
object?
Default: undefined

Una expresión que especifica write fieldssi additional_fields se pueden evaluar los permisos de escritura de, y. Si es falso, se deniega el acceso de escritura a todo el documento.

Para mantener la compatibilidad de Sync, la expresión debe estar definida y solo puede hacer referencia a campos consultables.

read
object?
Default: undefined

Una expresión que se evalúa como verdadera si el rol tiene permiso para leer todos los campos del documento.

Para mantener la compatibilidad con Sync, la expresión debe ser un literal booleano (true falseo).

Los permisos de lectura a nivel de documento tienen prioridad sobre cualquier permiso a nivel de campo. Si un rol tiene permisos a nivel de documento read, este se aplica a todos los campos del documento. Los permisos de lectura especificados por fields o additional_fields no anulan los permisos a nivel de documento read.

Para definir una alternativa predeterminada junto con las reglas a nivel de campo, deje read sin definir y utilice additional_fields.

write
object?
Default: undefined

Una expresión que evalúa como verdadera si el rol tiene permiso para agregar, modificar o remover todos los campos del documento.

Para mantener la compatibilidad con Sync, la expresión debe ser un literal booleano (true falseo).

Los permisos de escritura a nivel de documento tienen prioridad sobre los permisos a nivel de campo. Si un rol tiene permisos a nivel de documento write, estos se aplican a todos los campos del documento. Los permisos de escritura especificados por fields o additional_fields no anulan los permisos a nivel de documento write.

Para definir una alternativa predeterminada junto con las reglas a nivel de campo, deje write sin definir y utilice additional_fields.

Puede utilizar expansiones como %%root y %%prevRoot en write expresiones JSON.

Importante

Permiso de lectura implícito

Cada vez que un rol tiene permiso write para un ámbito particular, también tiene permiso read incluso si este no está definido explícitamente.

insert
object?
Default: true

Una expresión que evalúa a true si el rol tiene permiso para insertar un nuevo documento en la colección.

App Services solo evalúa esta expresión para operaciones de inserción y solo después de determinar que el rol tiene permiso write para todos los campos en el nuevo documento.

delete
object?
Default: true

Una expresión que se evalúa como verdadera si el rol tiene permiso para eliminar un documento de la colección.

App Services solo evalúa esta expresión para las operaciones de eliminación y solo después de determinar que el rol tiene permiso de write para todos los campos en el documento que se eliminarán.

search
Boolean
Default: true

Una expresión que se evalúa como verdadera si el rol tiene permiso para buscar en la colección mediante Atlas Search.

Importante

Servicios de aplicaciones realiza $search operaciones como usuario del sistema y aplica reglas a nivel de campo en los resultados de búsqueda. Esto significa que un usuario puede buscar en un campo sin acceso de lectura. En este caso, la búsqueda se basa en el campo especificado, pero ningún documento devuelto lo incluye.

fields
Document
Default: {}

Un documento donde cada clave corresponde a un nombre de campo y cada valor define los permisos de nivel de campo read y write del rol para el campo correspondiente en un documento consultado.

Para mantener la compatibilidad de Sync, las read write expresiones internas y deben ser literales booleanos (true falseo).

"fields": {
"<Field Name>": {
"read": { Expression },
"write": { Expression },
"fields": <Fields Document>
},
...
}

Nota

Prioridad del permiso

Los permisos read o write a nivel de documento anulan todos los permisos a nivel de campo del mismo tipo. Si se definen permisos para un campo que contiene un documento incrustado, estos permisos anulan cualquier permiso definido para los campos incrustados del documento.

fields.<Field Name>.read
object?
Default: false

Una expresión que se evalúa como verdadera si el rol tiene permiso para leer el campo.

Para mantener la compatibilidad con Sync, la expresión debe ser un literal booleano (true falseo).

fields.<Field Name>.write
object?
Default: false

Una expresión que se evalúa como verdadera si el rol tiene permiso para agregar, modificar o eliminar el campo.

Para mantener la compatibilidad con Sync, la expresión debe ser un literal booleano (true falseo).

fields.<Field Name>.fields
Document
Default: {}

Un documento fields que define los permisos read y write para los campos que están integrados dentro de este campo en un documento consultado.

Consulte el patrón de función Permisos a nivel de campo para documentos incrustados para obtener más información.

additional_fields
Document
Default: {}

Un documento que define los permisos de nivel de campo read y write del rol para cualquier campo en un documento consultado que no tenga permisos definidos explícitamente en el documento fields.

Para mantener la compatibilidad de Sync, las read write expresiones internas y deben ser literales booleanos (true falseo).

"additional_fields": {
"read": { Expression },
"write": { Expression }
}
additional_fields.read
object?
Default: false

Una expresión que se evalúa como verdadera si el rol tiene permiso para leer cualquier campo que no tenga una definición de permiso a nivel de campo fields en.

Para mantener la compatibilidad con Sync, la expresión debe ser booleana (true falseo).

additional_fields.write
object?
Default: false

Una expresión que se evalúa como verdadera si el rol tiene permiso para agregar, modificar o eliminar cualquier campo que no tenga una definición de permiso a nivel de campo fields en.

Para mantener la compatibilidad con Sync, la expresión debe ser booleana (true falseo).

{
"name": "<Filter Name>",
"apply_when": { Expression },
"query": { MongoDB Query },
"projection": { MongoDB Projection }
}
Campo
Descripción
name
string

Obligatorio. El nombre del filtro. Los nombres de los filtros son útiles para identificarlos y distinguirlos. Limitado a 100 caracteres o menos.

apply_when
object

Una expresión que determina cuándo se aplica este filtro a una operación MongoDB entrante.

Importante

Atlas App Services evalúa y aplica filtros antes de leer cualquier documento, por lo que no se pueden usar expansiones de documentos de MongoDB en la expresión "Aplicar cuando" de un filtro. Sin embargo, sí se pueden usar otras expansiones %%user como, %%values y.%function

query
object
Default: {}

Una consulta de MongoDB que App Services fusiona en la consulta existente de una operación filtrada.

Ejemplo

Un filtro retiene documentos que tengan un score por debajo de 20 usando la siguiente query:

{ "score": { "$gte": 20 } }
projection
object
Default: {}

Una proyección de MongoDB que App Services fusiona con la proyección existente de una operación filtrada.

Importante

Conflictos de proyección

Las proyecciones de MongoDB pueden ser inclusivas o exclusivas; es decir, pueden devolver solo los campos especificados o excluir los campos no especificados. Si se aplican varios filtros a una consulta, todos deben especificar el mismo tipo de proyección; de lo contrario, la consulta fallará.

Ejemplo

Un filtro retiene el campo _internal de todos los documentos utilizando la siguiente proyección:

{ "_internal": 0 }

Volver

Usuarios y proveedores de autenticación

En esta página