Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 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" }
}
}
}

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 string

  • Boolean: true o false

  • String: Una secuencia de caracteres UTF‐8

  • Int:Un entero con signo de 32 bits

  • Long: Un entero firmado de 64 bits

  • 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")

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]
}

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)

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

objectId

ObjectId

int

Int

long

Int

double

Float

decimal

Float

date

DateTime

timestamp

DateTime

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

    The following query includes a QueryInput with two fields, rated and year. Both of these field names are defined in the Movie document 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 QueryInput es un campo de operador válido para el tipo consultado, entonces Servicios de aplicación armoniza un documento si el operador evalúa a true.

    Ejemplo

    The following query includes a QueryInput with two fields, rated_in and year_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
    }

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

Int
Float
String
ObjectId
DateTime

<Field Type>

Finds documents where the field is greater than the specified value.

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>

Finds documents where the field is greater than or equal to the specified value.

Ejemplo

This query finds all movies that were released in or after the year 2000:

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

es

Int
Float
String
ObjectId
DateTime

<Field Type>

Finds documents where the field is less than the specified value.

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 que el valor especificado.

Ejemplo

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

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

[QueryInput!]

Finds documents that match all of the provided QueryInput objects.

Ejemplo

This query finds all movies that are rated PG-13 and have a runtime of less than 120 minutes:

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

This query finds all movies that are rated either G or 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

Available for all types

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
}
}

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
}

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
}

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
}

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.

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

query

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, la operación de consulta coincide con todos los documentos.

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

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

query

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

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 object or 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

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 InsertInput object into their respective BSON type.

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

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 InsertInput object into their respective BSON type as defined in the collection schema.

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

query

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

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

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

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

query

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

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 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
}
}

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

query

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 query matches multiple documents, the mutation deletes the first document in the result set, which is likely but not guaranteed to be the most recently inserted document.

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

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

Volver

Autenticación de solicitudes GraphQL