Graphql è eccezionale e ho iniziato a utilizzarlo nella mia app. Ho una pagina che visualizza informazioni di riepilogo e ho bisogno di graphql per restituire i conteggi aggregati? Può essere fatto?Can graphql restituisce conteggi aggregati?
risposta
Non esiste una funzione di aggregazione automatica in GraphQL.
È possibile aggiungere un campo denominato summary
e nella funzione resolve
calcolare i totali.
... ha bisogno di graphql per restituire i conteggi aggregati? Può essere fatto?
Sì, può essere fatto.
GraphQL lo fa automaticamente per te? No, perché non sa/cura di dove hai la tua fonte di dati.
Come? GraphQL non impone come si ottiene/mutano i dati che l'utente ha interrogato. Spetta alla tua implementazione ottenere i dati aggregati richiesti. È possibile ottenere dati aggregati direttamente da MongoDB e restituirli, oppure ottenere tutti i dati necessari dall'origine dati e effettuare autonomamente l'aggregazione.
Definire un nuovo tipo di GraphQL che è un oggetto che contiene un elenco e un numero. Il numero verrebbe definito da una funzione resolver.
Sul server GraphQL è possibile definire la funzione resolver e, come parte di ciò, è necessario scrivere il codice che esegue i calcoli e le query necessarie per ottenere i conteggi aggregati.
Questo è simile a come si dovrebbe scrivere un serializzatore oggetto per un API REST o un endpoint API REST personalizzato che corre qualsiasi query di database sono necessari per calcolare i conteggi aggregati.
Il punto di forza di GraphQL è che consente al frontend più potenza nel determinare quali dati vengono specificatamente restituiti. Alcune delle cose che scrivi in GraphQL saranno le stesse di quelle che dovresti scrivere per un'API REST.
Buona spiegazione! Penso che il principale punto da asporto sia che GraphQL non fa i tuoi calcoli e le tue aggregazioni per te. Tutto ciò dovrebbe accadere nella funzione di risoluzione dell'oggetto query GraphQL, che deve essere detto di recuperare i dati pre-aggregati necessari, funziona su di esso e quindi restituisce il risultato. – batjko