Select Git revision
Forked from
joel.cavat / mongodb-orders
2 commits ahead of the upstream repository.
joel.vonderwe authored
README.md 3.10 KiB
- TP MongoDB
- Group members
- Start docker
- Option 1 (mongo containerized, node locally)
- Option 2 (mongo and node containerized)
- Use MongoDB
- Use a HTTP Serveur (optional)
- Using node locally (option 1)
- Using node locally (option 2)
- Missions
- Contraintes
- Requêtes à réaliser
- Vos solutions
- requête 1
- requête 2
- requête 3
- requête 4
- requête 5
- requête 6
- requête 7
TP MongoDB
Group members
- Favre Alexandre
- Riondet Guillaume
- von der Weid Joël
Start docker
Docker will run mongodb in a container. You can optionally use node with express to expose a HTTP API.
You have two options for the HTTP API:
- run locally with node (option 1)
- run node in a container (option 2)
Option 1 (mongo containerized, node locally)
build and run MongoDB and Node.js API with orders.json
dump:
docker-compose up --build -d
if you encounter any problem (no order db), run mongo-seed
first :
docker-compose up --build -d mongo-seed
docker-compose up -d
use mongodb (mongo shell):
docker-compose exec mongo-orders mongo admin
Option 2 (mongo and node containerized)
docker-compose -f docker-compose-with-node.yml up --build -d
Use MongoDB
in mongodb shell:
show dbs;
use order;
show collections;
db.orders.find();
function pretty()
prettify the document
db.orders.find().pretty();
compter le nombre d'enregistrements:
db.orders.find().count();
il est possible d'exécuter du javascript pour ajouter des fonctionnalités supplémentaires (mais faites le maximum avec l'API de mongodb):
db.orders.find().map( obj => obj.vendors );
Use a HTTP Serveur (optional)
Using node locally (option 1)
cd api
npm install
npm start
API in Node.js available, example route http://localhost:3000/by-customer-pseudo/A**D
Using node locally (option 2)
API already available at http://localhost:8080/by-customer-pseudo/A**D
Missions
Contraintes
- Utilisation du
find()
pour les quatre premières requêtes - Utilisation du
aggregate()
pour les suivantes
Requêtes à réaliser
- liste des commandes qui ont deux sacs
- liste des commandes concernant "les-fromages-de-gaetan"
- comptez le nombre de commandes qui ont plus de quatre sacs
- affichez les pseudos des acheteurs qui ont quatre sacs ou plus
- liste des commandes du client avec l'id NumberLong("1848533681975648")
- pour chaque client (id et pseudo), comptez le nombre de commandes
- pour chaque vendeur, comptez le chiffre d'affaire (indication:
$unwind
)
Vos solutions
requête 1
db.orders.find({"shipping.bags": 2}).pretty();
requête 2
db.orders.find({"vendors.slug": "les-fromages-de-gaetan"}).pretty();
requête 3
db.orders.find({"shipping.bags": {"$gt" : 4}}).count();
requête 4
db.orders.distinct("customer.pseudo", {"shipping.bags": {"$gte" : 4}});
requête 5
db.orders.find({"customer.id": NumberLong(1848533681975648)}).pretty();
requête 6
db.orders.aggregate({$group: { _id: {"id" : "$customer.id", "pseudo": "$customer.pseudo"}, count: {$sum:1}}})
requête 7
db.orders.aggregate({ $unwind : "$items"}, {$group: { _id: {"slug" : "$items.vendor"}, sales: {$sum : "$items.finalprice"}}}).pretty();