-
construire le container
graphql:$ cd graphql $ rm -fr node_modules/ $ docker build -t graphql . -
démarrer la pile de containers graphql/mongo
$ cd .. $ docker-compose -f stack.yml up -d -
accéder à l'application : Ouvrir la page
ui/index.htmlavec le navigateur
-
désactiver le container
graphQLde la pile Docker -
déterminer l'adresse IP du container
Mongo$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-framework_mongo_1 172.18.0.3 -
inscrire cette adresse en dur dans le résolveur
graphql/resolvers.jsconst url = 'mongodb://root:example@172.18.0.3:27017'; -
effectuer le développement des requêtes en modifiant le schéma, les résolveurs et en utilisant le playground
-
lorsque le développement du connecteur
graphQLest stable, modifier l'adresse IP du containerMongodans le résolveur :const url = 'mongodb://root:example@mongodb:27017'; -
puis construisez le container :
$ docker build -t graphql . -
vous pouvez maintenant l'intégrer à la pile
Vous pouvez utiliser D3.js pour effectuer la visualisation des données obtenues par graphQL :
d3.json("http://localhost:4000/?query={genres(mini:0){genre count}}").then(drawGenres)
- on démarre depuis une extraction des jeux de https://www.kaggle.com/rush4ratio/video-game-sales-with-ratings
- on transforme les données pour obtenir les éléments suivants :
{
"Name": "Wii Sports",
"Platform": "Wii",
"Year_of_Release": "2006",
"Genre": "Sports",
"Publisher": "Nintendo",
"NA_Sales": 41.36,
"EU_Sales": 28.96,
"JP_Sales": 3.77,
"Other_Sales": 8.45,
"Global_Sales": 82.53,
"Critic_Score": 76,
"Critic_Count": 51,
"User_Score": "8",
"User_Count": 322,
"Developer": "Nintendo",
"Rating": "E"
},
-
on insère ces données dans le container
Mongo:jq -c .games[] games.json | docker exec -i docker-framework_mongo_1 sh -c 'mongoimport -d gamesDB -c games --authenticationDatabase admin -u root -p example' -
on crée les collections à partir du jeu de données initial en exécutant la commande :
docker exec -i docker-framework_mongo_1 sh -c 'mongo --quiet --authenticationDatabase admin -u root -p example gamesDB' < path_to_query_file -
créer la collection des plates-formes
db.games.aggregate([
{
$group:{
_id:{
platform:"$Platform",
},
count:{
$sum: 1
}
}
},
{
$project:{
platform:"$_id.platform",
count:1,
_id:0
}
},
{
$out:"platforms"
}
])
- créer la collection des éditeurs :
db.games.aggregate([
{
$group:{
_id:{
publisher:"$Publisher",
},
count:{
$sum: 1
}
}
},
{
$project:{
publisher:"$_id.publisher",
count:1,
_id:0
}
},
{
$out:"publishers"
}
])
- créer la collection des genres :
db.games.aggregate([
{
$group:{
_id:{
genre:"$Genre",
},
count:{
$sum: 1
}
}
},
{
$project:{
genre:"$_id.genre",
count:1,
_id:0
}
},
{
$out:"genres"
}
])
- créer la collection Plate-forme par année :
db.games.aggregate([
{
$group:{
_id:{
platform:"$Platform",
year_of_release:"$Year_of_Release"
},
count:{
$sum: 1
}
}
},
{
$project:{
platform:"$_id.platform",
year_of_release:"$_id.year_of_release",
count:1,
_id:0
}
},
{
$out:"platforms_by_year"
}
])