Overview
Atlas App Services genera automáticamente un esquema GraphQL para cualquier colección que tenga un esquema definido. Para cada colección, App Services genera lo siguiente:
A tipo de documento que representa un solo documento en la colección
Un conjunto de consultas y mutaciones que le permiten acceder y manipular documentos de la colección.
Un conjunto de tipos de entradas que permiten filtrar queries, modificar campos específicos y ordenar resultados.
Nota
Ejemplo de esquema de colección
Esta página incluye ejemplos que demuestran valores generados según el siguiente esquema para un movies colección:
{ "title": "Movie", "required": ["title"], "properties": { "_id": { "bsonType": "objectId" }, "title": { "bsonType": "string" }, "year": { "bsonType": "int" }, "rated": { "bsonType": "string" }, "runtime": { "bsonType": "int" }, "director": { "bsonType": "string" }, "reviews": { "bsonType": "array", "items": { "bsonType": "objectId" } }, "cast": { "bsonType": "array", "items": { "bsonType": "string" } } } }
Tipos escalares
App Services admite todos los tipos escalares estándar de GraphQLy también genera el ObjectId escalar.
The following scalar types are supported:
ObjectId: Un valor ObjectId serializado como un stringBoolean:trueofalseString: Una secuencia de caracteres UTF‐8Int:Un entero con signo de 32 bitsLong: Un entero firmado de 64 bitsFloat:Un valor de punto flotante de doble precisión con signoDateTime: Una fecha 3339 y hora UTC RFC (por ejemplo, "2020-09-01T::.15 3814918Z")
Tipos de documento
aplicación Services genera un único tipo GraphQL para los documentos de una colección basados en el esquema de la colección. El tipo emplea el nombre asignado en el campo title del esquema o el nombre de la colección si no se especifica title.
type Movie { _id: ObjectId title: String! year: Int rated: String runtime: Int director: String cast: [String] }
Mapeo de campos
App Services intenta asignar los campos del esquema de tu colección directamente a los campos de tus tipos GraphQL. La definición de nombres válidos descrita en la especificación GraphQL no admite todos los nombres de campo de documento válidos posibles, por lo que App Services aplica las siguientes reglas de transformación para determinar los nombres de campo en los tipos GraphQL generados:
elimina caracteres no compatibles
quitar los números iniciales
convertir a camel case
omitir los campos que comienzan con un guión bajo doble (por ejemplo,
__myField)
Mapeo de tipo BSON
El sistema de tipos de GraphQL es similar, pero no idéntico, a los BSON types que puedes utilizar en un esquema. Aplicación Services intenta asignar automáticamente entre los BSON types en tu esquema y los tipos GraphQL compatibles. Si un tipo de campo no tiene un equivalente en GraphQL, App Services no incluye el campo en el tipo de documento GraphQL generado.
The following table lists BSON types that you can use in a schema and the GraphQL types that they map to:
JSON/BSON Type | GraphQL Type |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nota
JSON supports two types that represent "no value": undefined and null. The GraphQL spec supports null but not undefined, so your app converts undefined values in the following way:
Si un campo de documento se establece explícitamente en
undefined, el tipo correspondiente de GraphQL es un objeto vacío, es decir,{}.Si el nombre del campo no está definido para el documento, o si el valor se establece explícitamente en
null, entonces el tipo GraphQL correspondiente esnull.
Tipos de entrada
GraphQL utiliza tipos de entrada para representar los parámetros que pasas a las consultas y mutaciones. Este es el enfoque estándar utilizado por todas las APIs de GraphQL para definir entradas de usuario inequívocas y seguras en cuanto a tipo.
Entrada de consulta
Un QueryInput objeto define un conjunto de una o más condiciones que un documento debe cumplir para ser incluido en una consulta. El objeto puede incluir campos del tipo de documento, así como cualquiera de los campos de operador que App Services genera automáticamente según el tipo de campo.
Campos de documento: si un
QueryInputcampo tiene el mismo nombre que un campo en el tipo de documento, App Services coincide con un documento si el valor especificado en el campo de entrada y el valor del campo en el documento son los mismos.Ejemplo
The following query includes a
QueryInputwith two fields,ratedandyear. Both of these field names are defined in theMoviedocument type, so App Services performs an equality match for both.The query returns the title of all movies released in the year 2000 that are rated R.
movies(query: { rated: "R", year: 2000 }) { title } Campos de operador: Si un campo
QueryInputes un campo de operador válido para el tipo consultado, entonces Servicios de aplicación armoniza un documento si el operador evalúa atrue.Ejemplo
The following query includes a
QueryInputwith two fields,rated_inandyear_gt. Both of these are operator fields, so App Services evaluates each operator to determine if a document matches.The query returns the title of all movies released after the year 2000 that are rated either G or PG-13.
movies(query: { rated_in: ["G", "PG-13"], year_gt: 2000 }) { title }
Comparison Operator Fields
A comparison operator field allows you to define a condition that is more complex than exact equality, such as a range query. App Services generates a set of comparison operator fields for every field in the document type based on the field type. Each comparison operator typically applies to only a subset of all field types, so App Services only generates operator fields for valid combinations.
A comparison operator field evaluates to true for a given document if the value of the field in the document satisfies the operator condition relative to the specified value.
Los campos del operador de comparación tienen el siguiente formato:
<Field Name>_<Operator>: <Operator Value>
Operador | Tipos de campos admitidos | Tipo de valor del operador | Descripción | ||||
|---|---|---|---|---|---|---|---|
gt | IntFloatStringObjectIdDateTime |
| Finds documents where the field is greater than the specified value. EjemploEsta consulta encuentra todas las películas que se estrenaron después del año 2000: | ||||
gte | IntFloatStringObjectIdDateTime |
| Finds documents where the field is greater than or equal to the specified value. EjemploThis query finds all movies that were released in or after the year 2000: | ||||
es | IntFloatStringObjectIdDateTime |
| Finds documents where the field is less than the specified value. EjemploEsta consulta encuentra todas las películas que se estrenaron antes del año 2000: | ||||
lte | IntFloatStringObjectIdDateTime |
| Encuentra documentos donde el campo es menor o igual que el valor especificado. EjemploEsta consulta encuentra todas las películas que se estrenaron en el año 2000 o antes: | ||||
ne | IntFloatStringBooleanObjectIdDateTime |
| Encuentra documentos donde el campo no es igual al valor especificado. EjemploEsta consulta encuentra todas las películas que se estrenaron en cualquier año excepto 2000: | ||||
in | IntFloatStringBooleanObjectIdDateTimeArray |
| Busca documentos donde el campo es igual a cualquier valor de la matriz especificada. Si el campo es EjemploEsta query encuentra todas las películas que presentan a Emma Stone y Ryan Gosling juntos o por separado: | ||||
nin | IntFloatStringBooleanObjectIdDateTimeArray |
| Busca documentos donde el campo no es igual a ningún valor de la matriz especificada. Si el campo es EjemploEsta consulta encuentra todas las películas que no están clasificadas G o PG-13: |
Logical Operator Fields
Un campo de operador lógico permite definir combinaciones lógicas de objetos QueryInput independientes. App Services genera campos de operadores lógicos a nivel raíz para todos los tipos QueryInput.
Un campo de operador lógico se evalúa como true para un documento determinado si el resultado evaluado de todos los objetos QueryInput especificados satisfacen la condición del operador.
Logical operator fields have the following form:
<Operator>: [<QueryInput>, ...]
Operador | Tipo de valor del operador | Descripción | ||||||
|---|---|---|---|---|---|---|---|---|
y |
| Finds documents that match all of the provided EjemploThis query finds all movies that are rated PG-13 and have a runtime of less than 120 minutes: | ||||||
o |
| Busca documentos que coincidan con cualquiera de los EjemploThis query finds all movies that are rated either G or PG-13: |
Campos de operadores de elementos
Un campo de operador de elemento permite definir una condición booleana que describe un campo del documento. App Services genera un conjunto de campos de operador de elemento para cada campo del tipo de documento.
Un campo de operador de elemento se evalúa como true para un documento determinado si el resultado de evaluar la condición del operador en el campo del documento coincide con el valor booleano especificado.
Los campos de operador de elemento tienen el siguiente formato:
<Field Name>_<Operator>: <Operator Value>
Operador | Tipos admitidos | Tipo de valor del operador | Descripción | ||||||
|---|---|---|---|---|---|---|---|---|---|
exists | Available for all types | Booleano | Encuentra documentos donde el campo no es EjemploEsta consulta encuentra todas las películas que no tienen un valor definido para el campo |
InsertInput
An InsertInput object defines a document to insert into a collection. The document must conform to the GraphQL document type and include all required fields.
Ejemplo
La siguiente mutación incluye un InsertInput con varios campos definidos en el tipo de documento Movie. El tipo Movie requiere que todos los documentos tengan un campo title, por lo que el InsertInput debe incluir uno.
La mutación inserta una nueva película llamada "Mi película falsa".
insertOneMovie(input: { title: "My Fake Film", rated: "UNRATED", year: 2020 }) { title }
UpdateInput
An UpdateInput object defines a new value for one or more fields in a document. The updated document includes the new field values. Any fields that you do not specify remain unchanged. The updated values must conform to the GraphQL document type.
Ejemplo
The following mutation includes an UpdateInput that sets the title field to "My Super Real Film".
updateOneMovie( query: { title: "My Fake Film" } set: { title: "My Super Real Film" } ) { title }
RelationInput
A RelationInput defines a new set of related documents for a relationship field in the mutated document. You can reference documents that already exist in the related collection with the link field or insert new documents into the related collection with the create field.
No se pueden usar link y create simultáneamente. Si se especifican ambos, la operación create tiene prioridad y la link se ignora.
type RelationInput { link: [ObjectId] create: [InsertInput] }
Ejemplo
The following mutation includes an UpdateInput that modifies the reviews field. The field contains an array of _id values for documents in a separate reviews collection for to the field has a defined relationship.
La mutación establece la relación para apuntar a un documento recién creado y dos documentos existentes en la colección reviews.
updateOneMovie( query: { title: "My Fake Film" } set: { reviews: { link: ["", ""] create: [] } } ) { title }
Ordenar por entrada
Una enumeración SortByInput define un orden de clasificación para los documentos devueltos por una consulta. Puede ordenar en orden ascendente y descendente cualquier campo de nivel raíz que no tenga un tipo object o array. La API de GraphQL no admite ordenaciones anidadas.
App Services genera dos valores de enumeración de ordenación para cada campo. Cada valor es un identificador en mayúsculas que combina el nombre del campo y la dirección de ordenación, ya sea ASC o DESC.
Ejemplo
La siguiente query devuelve películas ordenadas por el año en que se estrenaron, con las más recientes al principio.
movies(sortBy: YEAR_DESC) { title }
Resolutores de query
App Services genera dos consultas GraphQL para cada colección:
Una query singular que encuentra un documento específico en la colección.
Una consulta plural que busca todos los documentos de la colección. Puede filtrar una consulta plural para incluir solo el subconjunto de documentos de una colección que coincidan
QueryInputcon.
Find a Single Document
The single document query field uses the same name as the data type that the collection contains. It returns a single document of the queried type and accepts the following parameters:
Parameter | Tipo | Descripción |
|---|---|---|
| Optional. An object that defines a filter for documents in the collection. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. Si no especifica un parámetro |
query { movie(query: { title: "The Matrix" }) { title year runtime director } }
Encuentra varios documentos
The multiple document query field uses the same name as the data type that the collection contains but has an additional "s" appended to the type name. It returns an array of documents of the queried type and accepts the following parameters:
Parameter | GraphQL Type | Descripción |
|---|---|---|
| Optional. An object that defines a filter for documents in the collection. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. Si no especifica un argumento | |
| Int | Opcional. Por defecto |
| Optional. A value that defines a sort order for documents in the query result set. You can sort in ascending and descending order by any root-level field that does not have a type of El valor
Si no se especifica un argumento |
query { movies( query: { year: 2000 } limit: 100 sortBy: TITLE_ASC ) { title year runtime director } }
Resolucionadores de mutaciones
App Services genera un conjunto de mutaciones para los documentos de cada colección. Estas permiten insertar, modificar y eliminar uno o más documentos.
Inserta un solo documento
El campo de mutación de inserción de documento único usa el nombre insertOne<Type>, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Devuelve el documento insertado y acepta los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Required. A document to insert into the collection. If the collection schema marks a field as required then this document must include a valid value for that field. App Services automatically converts GraphQL types in the |
mutation { insertOneMovie(data: { title: "Little Women" director: "Greta Gerwig" year: 2019 runtime: 135 }) { _id title } }
Inserta varios documentos
El campo de mutación de inserción de múltiples documentos usa el nombre insertMany<Type>s, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Devuelve el documento insertado y acepta los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| [InsertInput!]! | Required. An array of documents to insert into the collection. The array must contain at least one document. If the collection schema marks a field as required then each document must include a valid value for that field. App Services automatically converts GraphQL types in the |
mutation { insertManyMovies(data: [ { title: "Little Women" director: "Greta Gerwig" year: 2019 runtime: 135 }, { title: "1917" director: "Sam Mendes" year: 2019 runtime: 119 } ]) { _id title } }
Actualiza un solo documento
El campo de mutación de actualización de un solo documento usa el nombre updateOne<Type>, donde <Type> es el nombre singular del tipo de dato que la colección contiene. Devuelve el documento actualizado y acepta los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Optional. An object that configures which documents in the collection to update. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. Si no se especifica un argumento | |
| UpdateInput! | Obligatorio. Un objeto que define un nuevo valor para uno o más campos del documento. El documento actualizado incluirá los nuevos valores de campo. Cualquier campo que no especifique permanece sin cambios. Aplicación Services convierte automáticamente los tipos GraphQL en el objeto |
mutation { updateOneMovie( query: { title: "The Room" } set: { runtime: 99 } ) { _id title } }
Actualiza varios documentos
The multiple document update mutation field uses the name updateMany<Type>s where <Type> is the singular name of the data type that the collection contains. It returns an UpdateManyPayload document that describes the number of fields that were matched and modified and accepts the following parameters:
Parameter | Tipo | Descripción |
|---|---|---|
| Optional. An object that configures which documents in the collection to update. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. Si no se especifica un argumento | |
| Obligatorio. Un objeto que define un nuevo valor para uno o más campos del documento. El documento actualizado incluirá los nuevos valores de campo. Cualquier campo que no especifique permanece sin cambios. Aplicación Services convierte automáticamente los tipos GraphQL en el objeto |
mutation { updateManyMovies( query: { director: "Tommy Wiseau" } set: { director: "Tom Wiseau" } ) { matchedCount modifiedCount } }
Insertar un solo documento
El campo de mutación de inserción y actualización de un solo documento usa el nombre upsertOne<Type>, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Este solucionador actualiza un documento que coincide con el parámetro de consulta e inserta un nuevo documento si ninguno coincide con la consulta. Devuelve el documento insertado y acepta los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Optional. An object that configures which document to update. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. Si no especifica un argumento | |
| Obligatorio. El documento que se insertará si el |
mutation { upsertOneMovie( query: { title: "Blacksmith Scene" } data: { title: "Sandcastles in the Sand", director: "Robin Scherbatsky" runtime: 90 year: 2002 } ) { _id title } }
Replace a Single Document
El campo de mutación de reemplazo de documento único utiliza el nombre replaceOne<Type> donde <Type> es el nombre singular del tipo de dato que contiene la colección. Devuelve el documento reemplazado y acepta los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Opcional. Un objeto que configura los documentos de la colección que se reemplazarán. El objeto puede especificar uno o más campos del tipo de datos y debe incluir un valor para cada campo. La consulta busca todos los documentos que incluyan los valores de campo especificados. Si no especifica un argumento | |
| Obligatorio. El documento que reemplaza al documento consultado. Si el esquema de colección marca un campo como obligatorio, este documento debe incluir un valor válido para dicho campo. App Services convierte automáticamente los tipos GraphQL del objeto |
mutation { replaceOneMovie( query: { title: "Blacksmith Scene" } data: { title: "Sandcastles in the Sand", director: "Robin Scherbatsky" runtime: 90 year: 2002 } ) { _id title } }
Borrar un único documento
The single document delete mutation field uses the name deleteOne<Type> where <Type> is the singular name of the data type that the collection contains. It returns the deleted document and accepts the following parameters:
Parameter | Tipo | Descripción |
|---|---|---|
| Required. An object that configures which document in the collection to delete. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. If the |
mutation { deleteOneMovie(query: { title: "The Room" }) { _id title year runtime director } }
Borra varios documentos
El campo de mutación de eliminación de varios documentos usa el nombre deleteMany<Type>s, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Devuelve un documento DeleteManyPayload que describe el número de documentos eliminados y acepta los siguientes parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Optional. An object that configures which documents in the collection to delete. The object may specify one or more fields from the data type and must include a value for each field. The query matches all documents that include the specified field values. Si no especifica un argumento |
mutation { deleteManyMovies(query: { director: "Tommy Wiseau" }) { deletedCount } }
Paginate Data
Puede paginar datos en sus consultas con los tipos proporcionados por el esquema generado por la API GraphQL.
La Atlas GraphQL API no tiene un operador offset, como recomienda la documentación de GraphQL para la paginación.
En su lugar, puede utilizar los solucionadores de consultas de búsqueda de múltiples documentos del esquema generado con query loslimit operadores, y sortBy para paginar datos.
Para paginar datos en orden ascendente:
query PaginateAscending( # Do not include `previousTitle` for the first query # in a pagination sequence. $previousTitle: String, $limit: Int!, ) { movies( query: { title_gt: $previousTitle } limit: $limit sortBy: TITLE_ASC ) { title year runtime director } }
Para paginar datos en orden descendente:
query PaginateAscending( # Do not include `nextTitle` for the first query # in a pagination sequence. $nextTitle: String, $limit: Int!, ) { movies( query: { title_lt: $nextTitle } limit: $limit sortBy: TITLE_DESC ) { title year runtime director } }
For a example of this pagination pattern implemented in a client application, refer to Paginate Data in the Realm Web SDK documentation.
Nota
Este enfoque de paginación es similar a las consultas de rango para los controladores MongoDB, como se describe en la documentación del servidor MongoDB.