What I want to do
I have 3 dgraph.types:
Artistfor music artist (blue dots),Releasefor a music artist’s releases (green dots), andGenreto 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 ![]()
