What I want to do
I have 3 dgraph.type
s:
Artist
for music artist (blue dots),Release
for a music artist’s releases (green dots), andGenre
to describe the musical genre(s) for each release (pink dots).
These types are connected with 2 types of relations:
<ArtistUid>
<hasRelease>
<ReleaseUid>
: 1:n relation between an artist and its releases<ReleaseUid>
<hasGenre>
<GenreUid>
: 1:n relation between a release and its genres
This is illustrated here, using the artists “Two Door Cinema Club” and “Amaral” for demo purposes:
The query for this result is:
query {
ARTISTS_EXTENDED as var(func: eq(dgraph.type, "Artist"))
{
amountReleases as count(hasRelease)
}
artists(func: uid(ARTISTS_EXTENDED), orderdesc: val(amountReleases))
{
name
amountReleases: val(amountReleases) # works fine
# TODO: amountReleasesByGenres
r: hasRelease {
title: name
g: hasGenre {
name
}
}
}
}
JSON Output
{ "data": { "artists": [ { "name": "Amaral", "amountReleases": 59, "r": [ { "title": "Estrella De Mar / Pájaros En La Cabeza", "g": [ { "name": "Pop" } ] }, { "title": "Salto Al Color", "g": [ { "name": "Pop" } ] }, { "title": "Nuestro Tiempo", "g": [ { "name": "Pop" } ] }, { "title": "Mares Igual Que Tú", "g": [ { "name": "Pop" } ] }, { "title": "AMARAL - SUS ÁLBUMES DE ESTUDIO 1998-2008", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Salta (Acústico - En Directo)", "g": [ { "name": "Rock" } ] }, { "title": "Un Día Más (Acústico - En Directo)", "g": [ { "name": "Rock" } ] }, { "title": "500 Vidas (En Directo)", "g": [ { "name": "Rock" } ] }, { "title": "Nocturnal (Solar Sessions)", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Superluna (Directo Desde El Planeta Tierra)", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Nocturnal", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Llévame Muy Lejos", "g": [ { "name": "Rock" } ] }, { "title": "Ratonera", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "1998 ★ 2008 ", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Amaral - 4 Álbumes", "g": [ { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Hoy Es El Principio Del Final", "g": [ { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Hacia Lo Salvaje", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Hacia Lo Salvaje", "g": [ { "name": "Pop" } ] }, { "title": "Antártida", "g": [ { "name": "Pop" } ] }, { "title": "La Barrera Del Sonido", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "El Blues De La Generación Perdida", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Granada", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Juntos", "g": [ { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Kamikaze", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Gato Negro / Dragón Rojo", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Amaral", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Fundamentales", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Escapar (Slipping Away)", "g": [ { "name": "Electronic" }, { "name": "Pop" } ] }, { "title": "Pájaros En La Cabeza", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "El Universo Sobre Mí", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "El Comienzo Del Big Bang Gira 2005", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Revolucion", "g": [ { "name": "Rock" } ] }, { "title": "Marta, Sebas, Guille Y Los Demás", "g": [ { "name": "Pop" } ] }, { "title": "Días De Verano", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Si Tu No Vuelves", "g": [ { "name": "Pop" } ] }, { "title": "Fan Single Vol.1", "g": [ { "name": "Folk, World, & Country" } ] }, { "title": "Más Allá", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Estrella de Mar", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Les Sentiments Ne Se Réparent Pas", "g": [ { "name": "Pop" } ] }, { "title": "Salir Corriendo", "g": [ { "name": "Pop" } ] }, { "title": "Te Necesito", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Estrella De Mar", "g": [ { "name": "Pop" } ] }, { "title": "Toda La Noche En La Calle", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": " Ni Tu Ni Yo, Te Necesito y Casi", "g": [ { "name": "Pop" }, { "name": "Latin" }, { "name": "Folk, World, & Country" } ] }, { "title": "Moriría Por Vos", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Al Final", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Sin Ti No Soy Nada", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Una Pequeña Parte Del Mundo", "g": [ { "name": "Electronic" }, { "name": "Rock" }, { "name": "Pop" }, { "name": "Latin" } ] }, { "title": "Como Hablar", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "A Solas de Sol Música", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Folk, World, & Country" } ] }, { "title": "Subamos Al Cielo", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Una Pequeña Parte Del Mundo Sampler 4 Tracks", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Cabecita Loca", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Tardes", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Voy A Acabar Contigo", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Amaral", "g": [ { "name": "Rock" }, { "name": "Pop" }, { "name": "Folk, World, & Country" } ] }, { "title": "Un Día Más", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "No Sé Qué Hacer Con Mi Vida", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Rosita", "g": [ { "name": "Rock" }, { "name": "Pop" } ] } ] }, { "name": "Two Door Cinema Club", "amountReleases": 28, "r": [ { "title": "Lost Songs (Found)", "g": [ { "name": "Electronic" }, { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Tourist History Remix EP", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "False Alarm", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Talk", "g": [ { "name": "Rock" } ] }, { "title": "Dirty Air", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Satellite ", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Live From Finsbury Park", "g": [ { "name": "Rock" } ] }, { "title": "Live At KCRW", "g": [ { "name": "Rock" } ] }, { "title": "Lavender", "g": [ { "name": "Rock" } ] }, { "title": "Bad Decisions", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Gameshow", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Are We Ready? (Wreck)", "g": [ { "name": "Rock" } ] }, { "title": "Handshake", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Next Year", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Changing Of The Seasons", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Beacon", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Sun (Remixes)", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Sleep Alone", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Mar 23, 2011 Big Orange Studios, Austin, TX", "g": [ { "name": "Rock" } ] }, { "title": "Tourist History", "g": [ { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Undercover Martyn", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Come Back Home", "g": [ { "name": "Electronic" }, { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "Sampler", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Live In Sydney", "g": [ { "name": "Electronic" }, { "name": "Rock" }, { "name": "Pop" } ] }, { "title": "I Can Talk", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "What You Know", "g": [ { "name": "Rock" } ] }, { "title": "Something Good Can Work", "g": [ { "name": "Electronic" }, { "name": "Rock" } ] }, { "title": "Four Words To Stand On", "g": [ { "name": "Rock" } ] } ] } ] }, "extensions": { "server_latency": { "parsing_ns": 213200, "processing_ns": 5908800, "encoding_ns": 558300, "assign_timestamp_ns": 2002900, "total_ns": 9007100 }, "txn": { "start_ts": 278115 }, "metrics": { "num_uids": { "": 0, "_total": 185, "dgraph.type": 0, "hasGenre": 87, "hasRelease": 4, "name": 94 } } } }
What I want to do is to query all artists, and for each artist, have a summary of how many releases of a certain genre this artist has. So for example, it would show a way lower amount for “Latin” (pink dot in image above) for the band “Amaral” than for “Rock”, or “Pop”. Any help would be very much appreciated