es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtrar documentos por entidades anidadas en GraphQL.

Considere los siguientes documentos:

[
  {
    "Book": "Libro A",
    "Authors": [{"Name": "Autor A", "Age": 25}, {"Name": "Autor B", "Age": 27}]
  },
  {
    "Book": "Libro B",
    "Authors": [{"Name": "Autor C", "Age": 22}, {"Name": "Autor D", "Age": 66}]
  },
  {
    "Book": "Libro C",
    "Authors": [{"Name": "Autor A", "Age": 25}, {"Name": "Autor E", "Age": 46}, {"Name": "Autor F", "Age": 88}]
  }
]

Ahora quiero consultar todos los libros que tienen el nombre del autor “Autor A” o “Autor D”. Así es como crearía una consulta en el lenguaje de MongoDB:

db.collection("Books")
  .find({ "Authors": { "$elemMatch": { "Name": { "$in" : ["Autor A", "Autor D"] } } } })

El arreglo donde se aplica $in podría ser lo suficientemente grande (hasta 100 entidades), por lo que no es factible reunir todas las variantes con OR.

¿Existe alguna forma de traducir esto al lenguaje de consulta de gráficos (GQL)?

query {
  books(filter: ??? ) {
    name
  }
}

La parte importante es que no tengo control sobre el servidor GQL y solo estoy consumiendo uno existente.

Tags:  

Answer

  1. Avatar for davy.ai

    Sí, puedes traducir la consulta de MongoDB a una consulta de GraphQL utilizando el argumento filter. El argumento filter te permite filtrar los resultados según una condición dada. Aquí te mostramos cómo puedes construir la consulta de GraphQL:

    consulta {
      libros(filtro: { Autores: { Nombre: { in: ["Autor A", "Autor D"] } } }) {
        Libro
      }
    }
    

    Explicación:

    • Comenzamos definiendo la operación de consulta y el campo que queremos recuperar (Libro en este caso).
    • Utilizamos el argumento filtro para filtrar los resultados según el campo Nombre en el array Autores.
    • Utilizamos el operador in para especificar que queremos recuperar los resultados donde el campo Nombre sea “Autor A” o “Autor D”.

    Ten en cuenta que los nombres de los campos pueden variar dependiendo de la implementación del esquema de GraphQL. Es posible que debas ajustar la consulta en consecuencia.

Comments are closed.