Docs Menu
Docs Home
/ /
API de GraphQL

Tipos de GraphQL, resolutores y operadores

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 recopilació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" }
}
}
}

App Services admite todos los tipos escalares estándar de GraphQLy también genera el ObjectId escalar.

Se admiten los siguientes tipos escalares:

  • ObjectId: Un valor ObjectId serializado como un string

  • Boolean: true o false

  • String: Una secuencia de caracteres UTF‐8

  • Int: Un entero con signo de 32bits

  • Long: Un entero con signo de 64bits

  • Float:Un valor de punto flotante de doble precisión con signo

  • DateTime: Una fecha 3339 y hora UTC RFC (por ejemplo, "2020-09-01T::.15 3814918Z")

App Services genera un único tipo GraphQL para los documentos de una colección, según el esquema de la misma. El tipo usa el nombre definido en el title campo del esquema o el nombre de la colección si no title se especifica.

type Movie {
_id: ObjectId
title: String!
year: Int
rated: String
runtime: Int
director: String
cast: [String]
}

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:

  • eliminar caracteres no admitidos

  • números iniciales de la tira

  • convertir a camel case

  • omitir los campos que comienzan con un guión bajo doble (por ejemplo, __myField)

El sistema de tipos GraphQL es similar, pero no idéntico, a los tipos BSON que se pueden usar en un esquema. App Services intenta automáticamente establecer una correspondencia entre los tipos BSON del esquema y los tipos GraphQL compatibles. Si un tipo de campo no tiene un equivalente GraphQL, App Services no lo incluye en el tipo de documento GraphQL generado.

La siguiente tabla enumera los tipos BSON que puede utilizar en un esquema y los tipos GraphQL a los que se asignan:

Tipo JSON/BSON
Tipo GraphQL

objectId

ObjectId

int

Int

long

Int

double

Float

decimal

Float

date

DateTime

timestamp

DateTime

Nota

JSON admite dos tipos que representan "sin valor": undefined y null. La especificación GraphQL admite null, pero no undefined, por lo que su aplicación convierte los valores undefined de la siguiente manera:

  • Si un campo de documento se establece explícitamente en undefined, entonces el tipo GraphQL correspondiente 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 es null.

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.

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 QueryInput campo 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

    La siguiente consulta incluye un QueryInput con dos campos, rated y year. Ambos nombres de campo están definidos en el tipo de documento Movie, por lo que App Services realiza una coincidencia de igualdad para ambos.

    La consulta devuelve el título de todas las películas estrenadas en el año 2000 que están clasificadas R.

    movies(query: { rated: "R", year: 2000 }) {
    title
    }
  • Campos de operador: si un QueryInput campo es un campo de operador válido para el tipo consultado, App Services coincide con un documento si el operador se evalúa true como.

    Ejemplo

    La siguiente consulta incluye un QueryInput con dos campos, rated_in y year_gt. Ambos son campos de operador, por lo que App Services evalúa cada operador para determinar si un documento coincide.

    La consulta devuelve el título de todas las películas estrenadas después del año 2000 que estén clasificadas como G o PG-13.

    movies(query: { rated_in: ["G", "PG-13"], year_gt: 2000 }) {
    title
    }

Un campo de operador de comparación permite definir una condición más compleja que la igualdad exacta, como una consulta de rango. App Services genera un conjunto de campos de operador de comparación para cada campo del tipo de documento, según el tipo de campo. Cada operador de comparación suele aplicarse solo a un subconjunto de todos los tipos de campo, por lo que App Services solo genera campos de operador para combinaciones válidas.

Un campo de operador de comparación se evalúa como true para un documento determinado si el valor del campo en el documento satisface la condición del operador en relación con el valor especificado.

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

Int
Float
String
ObjectId
DateTime

<Field Type>

Encuentra documentos donde el campo es mayor que el valor especificado.

Ejemplo

Esta consulta encuentra todas las películas que se estrenaron después del año 2000:

movies(query: { year_gt: 2000 }) {
title
year
}

gte

Int
Float
String
ObjectId
DateTime

<Field Type>

Encuentra documentos donde el campo es mayor o igual al valor especificado.

Ejemplo

Esta consulta encuentra todas las películas que se estrenaron en o después del año 2000:

movies(query: { year_gte: 2000 }) {
title
year
}

es

Int
Float
String
ObjectId
DateTime

<Field Type>

Encuentra documentos donde el campo es menor que el valor especificado.

Ejemplo

Esta consulta encuentra todas las películas que se estrenaron antes del año 2000:

movies(query: { year_lt: 2000 }) {
title
year
}

lte

Int
Float
String
ObjectId
DateTime

<Field Type>

Encuentra documentos donde el campo es menor o igual al valor especificado.

Ejemplo

Esta consulta encuentra todas las películas que se estrenaron en o antes del año 2000:

movies(query: { year_lte: 2000 }) {
title
year
}

ne

Int
Float
String
Boolean
ObjectId
DateTime

<Field Type>

Encuentra documentos donde el campo no es igual al valor especificado.

Ejemplo

Esta consulta encuentra todas las películas que se estrenaron en cualquier año excepto 2000:

movies(query: { year_ne: 2000 }) {
title
year
}

in

Int
Float
String
Boolean
ObjectId
DateTime
Array

[<Field Type>]

Busca documentos donde el campo es igual a cualquier valor de la matriz especificada. Si el campo es Array, busca todos los documentos donde cualquier valor de la matriz de campos también esté incluido en la matriz especificada.

Ejemplo

Esta query encuentra todas las películas que presentan a Emma Stone y Ryan Gosling juntos o por separado:

movies(query: { cast_in: ["Emma Stone", "Ryan Gosling"] }) {
title
year
}

nin

Int
Float
String
Boolean
ObjectId
DateTime
Array

[<Field Type>]

Busca documentos donde el campo no es igual a ningún valor de la matriz especificada. Si el campo es Array, busca todos los documentos donde cualquier valor de la matriz de campos también esté en la matriz especificada.

Ejemplo

Esta consulta encuentra todas las películas que no están clasificadas como G o PG-13:

movies(query: { rated_nin: ["G", "PG-13"] }) {
title
year
}

Un campo de operador lógico permite definir combinaciones lógicas de objetos QueryInput independientes. App Services genera campos de operador lógico de 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.

Los campos de operador lógico tienen la siguiente forma:

<Operator>: [<QueryInput>, ...]
Operador
Tipo de valor del operador
Descripción

Y

[QueryInput!]

Encuentra documentos que coinciden con todos los QueryInput objetos proporcionados.

Ejemplo

Esta consulta encuentra todas las películas con clasificación PG-13 y una 120 duración de menos de minutos:

query {
movies(query: { AND: [{ rated: "PG-13" }, { runtime_lt: 120 }] }) {
title
year
}
}

o

[QueryInput!]

Busca documentos que coincidan con cualquiera de los QueryInput objetos proporcionados.

Ejemplo

Esta consulta encuentra todas las películas clasificadas G o PG-13:

query {
movies(query: { OR: [{ rated: "G" }, { rated: "PG-13" }] }) {
title
year
}
}

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

Disponible para todo tipo

Booleano

Encuentra documentos donde el campo no es null.

Ejemplo

Esta consulta encuentra todas las películas que no tienen un valor definido para el campo year:

query {
movies(query: { year_exists: false }) {
_id
title
}
}

Un objeto InsertInput define un documento que se insertará en una colección. El documento debe ser compatible con el tipo de documento GraphQL e incluir todos los campos obligatorios.

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
}

Un objeto UpdateInput define un nuevo valor para uno o más campos de un documento. El documento actualizado incluye los nuevos valores de campo. Los campos que no especifique permanecerán sin cambios. Los valores actualizados deben ajustarse al tipo de documento GraphQL.

Ejemplo

La siguiente mutación incluye un UpdateInput que establece el campo title en "Mi película súper real".

updateOneMovie(
query: { title: "My Fake Film" }
set: { title: "My Super Real Film" }
) {
title
}

Un RelationInput define un nuevo conjunto de documentos relacionados para un campo de relación en el documento modificado. Puede referenciar documentos ya existentes en la colección relacionada con el campo link o insertar nuevos documentos en la colección relacionada con el campo create.

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

La siguiente mutación incluye un UpdateInput que modifica el campo reviews. El campo contiene una matriz de _id valores para documentos de una colección reviews independiente para los que el campo tiene una relación definida.

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
}

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
}

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 QueryInput con.

El campo de consulta de documento único usa el mismo nombre que el tipo de datos que contiene la colección. Devuelve un documento único del tipo consultado y acepta los siguientes parámetros:

Parameter
Tipo
Descripción

query

Opcional. Un objeto que define un filtro para los documentos de la colecció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 parámetro query, la operación de consulta coincide con todos los documentos.

query {
movie(query: { title: "The Matrix" }) {
title
year
runtime
director
}
}

El campo de consulta de varios documentos usa el mismo nombre que el tipo de datos que contiene la colección, pero añade un "s" adicional al nombre del tipo. Devuelve una matriz de documentos del tipo consultado y acepta los siguientes parámetros:

Parameter
Tipo GraphQL
Descripción

query

Opcional. Un objeto que define un filtro para los documentos de la colecció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 query, la operación de consulta coincide con todos los documentos.

limit

Int

Opcional. Por defecto 100. El número máximo de documentos a incluir en el conjunto de resultados de la query. Si la query coincide con más que el límite establecido, solo devuelve un subconjunto de los documentos coincidentes.

sortBy

Opcional. Un valor que define el orden de clasificación de los documentos en el conjunto de resultados de la consulta. Puede ordenarlos en orden ascendente y descendente por cualquier campo de nivel raíz que no tenga el tipo object o array.

El valor sortBy es un identificador en mayúsculas que combina el nombre del campo y la dirección de ordenación. Por ejemplo:

  • Para ordenar por título de la A a la Z usarías TITLE_ASC

  • se debe ordenar por puntuación de mayor a menor, se utilizaría RATING_DESC

Si no se especifica un argumento sortBy, la operación de query no garantiza el orden de los documentos en el conjunto de resultados.

query {
movies(
query: { year: 2000 }
limit: 100
sortBy: TITLE_ASC
) {
title
year
runtime
director
}
}

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.

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

data

Obligatorio. Un documento para insertar en la colección. Si el esquema de la 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 InsertInput a su respectivo tipo BSON.

mutation {
insertOneMovie(data: {
title: "Little Women"
director: "Greta Gerwig"
year: 2019
runtime: 135
}) {
_id
title
}
}

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

data

Obligatorio. Una matriz de documentos para insertar en la colección. La matriz debe contener al menos un documento. Si el esquema de la colección marca un campo como obligatorio, cada documento debe incluir un valor válido para dicho campo. App Services convierte automáticamente los tipos GraphQL del objeto InsertInput a su respectivo tipo BSON, según lo definido en el esquema de la colección.

mutation {
insertManyMovies(data: [
{
title: "Little Women"
director: "Greta Gerwig"
year: 2019
runtime: 135
},
{
title: "1917"
director: "Sam Mendes"
year: 2019
runtime: 119
}
]) {
_id
title
}
}

El campo de mutación de actualización de documento único usa el nombre updateOne<Type>, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Devuelve el documento actualizado y acepta los siguientes parámetros:

Parameter
Tipo
Descripción

query

Opcional. Un objeto que configura los documentos de la colección que se actualizará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 se especifica un argumento query, la mutación actualiza el primer documento en el conjunto de resultados, que probablemente, pero no con total seguridad, sea el documento insertado más recientemente.

set

¡Actualizar entrada!

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 UpdateInput a su respectivo tipo BSON.

mutation {
updateOneMovie(
query: { title: "The Room" }
set: { runtime: 99 }
) {
_id
title
}
}

El campo de mutación de actualización de múltiples documentos usa el nombre updateMany<Type>s, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Devuelve un documento UpdateManyPayload que describe el número de campos que se compararon y modificaron, y acepta los siguientes parámetros:

Parameter
Tipo
Descripción

query

Opcional. Un objeto que configura los documentos de la colección que se actualizará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 se especifica un argumento query, la mutación actualiza el primer documento en el conjunto de resultados, que probablemente, pero no con total seguridad, sea el documento insertado más recientemente.

set

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 UpdateInput a su respectivo tipo BSON.

mutation {
updateManyMovies(
query: { director: "Tommy Wiseau" }
set: { director: "Tom Wiseau" }
) {
matchedCount
modifiedCount
}
}

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

query

Opcional. Un objeto que configura el documento que se actualizará. 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 query o no hay documentos coincidentes, la mutación inserta el documento especificado en el parámetro data.

data

Obligatorio. El documento que se insertará si el query no coincide con ningún documento existente. Si el query coincide, un documento reemplaza el documento consultado. Si el esquema de colección marca un campo como obligatorio, este documento debe incluir un valor válido para ese campo. App Services convierte automáticamente los tipos GraphQL del objeto InsertInput a su respectivo tipo BSON.

mutation {
upsertOneMovie(
query: { title: "Blacksmith Scene" }
data: {
title: "Sandcastles in the Sand",
director: "Robin Scherbatsky"
runtime: 90
year: 2002
}
) {
_id
title
}
}

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

query

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 query, la mutación reemplaza el primer documento en el conjunto de resultados, que probablemente sea el documento insertado más recientemente, aunque no se garantiza.

data

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 InsertInput a su respectivo tipo BSON.

mutation {
replaceOneMovie(
query: { title: "Blacksmith Scene" }
data: {
title: "Sandcastles in the Sand",
director: "Robin Scherbatsky"
runtime: 90
year: 2002
}
) {
_id
title
}
}

El campo de mutación de eliminación de un solo documento usa el nombre deleteOne<Type>, donde <Type> es el nombre singular del tipo de datos que contiene la colección. Devuelve el documento eliminado y acepta los siguientes parámetros:

Parameter
Tipo
Descripción

query

Obligatorio. Un objeto que configura qué documento de la colección se eliminará. 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 query coincide con varios documentos, la mutación elimina el primer documento del conjunto de resultados, que probablemente sea el documento insertado más recientemente, aunque no se garantiza.

mutation {
deleteOneMovie(query: { title: "The Room" }) {
_id
title
year
runtime
director
}
}

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

query

Opcional. Un objeto que configura los documentos de la colección que se eliminará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 query, la mutación elimina todos los documentos de la colección.

mutation {
deleteManyMovies(query: { director: "Tommy Wiseau" }) {
deletedCount
}
}

Puede paginar datos en sus consultas con los tipos proporcionados por el esquema generado por la API GraphQL.

La API Atlas GraphQL no tiene un offset operador, 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
}
}

Para ver un ejemplo de este patrón de paginación implementado en una aplicación cliente, consulte Paginar datos en la documentación del SDK web de Realm.

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.

Volver

Autenticación de solicitudes GraphQL