Votre première app MongoDB
Nic Cottrell, Ingénieur Services Techniques, MongoDB
4 décembre 2018
Paris, France
Les bases de MongoDB:
● Collections,
● Documents JSON,
● CRUD,
● Indexes,
● Aggregation Framework
Visualiser les données MongoDB
Application simple sur le stack MEAN
Agenda
Nicholas Cottrell
Technical Services Engineer
nicholas.cottrell@mongodb.com
Normandie, France
stackoverflow.com/users/543315/nic-cottrell
github.com/niccottrell/mongodb-paris-2018
Un peu d'histoire
Dynamique
et Naturel
Rigide et
Normalisé
{
"_id": "Emp123",
"nom": "Jean Leblanc",
"titre": "Dev superstar",
"telephones": [ "0123456789", "063456789"]
}
Id (VARCHAR) Nom (VARCHAR)
Emp123 Jean Leblanc
Id (VARCHAR) PhoneId (Int)
Emp123 456
Emp123 567
PhoneId Phone (VARCHAR)
456 0123456789
567 063456789
vs
{
"_id": 123,
"nom": "Jean Leblanc",
"hps": NumberDecimal("37.5"),
"telephones": [ "0123456789", "063456789"],
"commence": ISODate("2016-10-05"),
"bureau": {
"ville": "Paris",
"lieu": { type: "Point",
coordinates: [2.3333, 48.86] }
},
"equipe": [ { "id": 189, "nom": "Camille Martin"},
{ "id": 256, "nom": "Maxime Lefevre" }, ... ]
}
Les documents - structures de données riches
Champs
Nombre entier
Chaîne de
caractères
Géo-localisation
Nombre à virgule flottante
Tableau de
sous-documents
Date
Décimal
{
"_id": 123,
"nom": "Jean Leblanc",
"hps": NumberDecimal("37.5"),
"telephones": [ "0123456789", "063456789"],
"commence": ISODate("2016-10-05"),
"bureau": {
"ville": "Paris",
"lieu": { type: "Point",
coordinates: [2.3333, 48.86] }
},
"equipe": [ { "id": 189, "nom": "Camille Martin"},
{ "id": 256, "nom": "Maxime Lefevre" }, ... ]
...
Les documents - structures de données riches
Champs
Nombre entier
Chaîne de
caractères
Géo-localisation
Nombre à virgule flottante
Tableau de
sous-documents
Interroger et indexer des
données à n'importe quel
niveau
Date
Décimal
{
"_id": 284,
"nom": "Melanie Mercier"
"titre": "Developpeur senior"
"commence": ISODate("2017-06-11")
"competences": ["java", "nodejs", "spring data"],
"device": "MacBook Pro 15",
...
}
Les documents sont flexibles
{
"_id": 123,
"nom": "Jean Leblanc"
"titre": "Chef superstar"
"telephones": [ "0123456789", "063456789"]
"commence": ISODate("2016-10-05")
…
}
Schéma polymorphes - aligné avec les principes de la POO
{
"_id": 284,
"nom": "Melanie Mercier"
"titre": "Developpeur senior"
"commence": ISODate("2017-06-11")
"competences": ["java", "nodejs", "spring data"],
"device": "MacBook Pro 15",
...
}
Les documents sont flexibles
{
"_id": 123,
"nom": "Jean Leblanc"
"titre": "Chef superstar"
"telephones": [ "0123456789", "063456789"]
"commence": ISODate("2016-10-05")
…
}
Schéma polymorphes - aligné avec les principes de la POO
db.staff.find({titre: /^Developpeur/}, {nom: 1, competences: 1})
SQL vs NoSQL
BdD relationnelle MongoDB
Gouvernance des
données
Validation du document et
Schéma JSON
Triggers Change Streams (3.6+)
Jointures $lookup (externe gauche)
Index et vues ✔ et ✔
GROUP BY Framework d'agrégation
SQL vs NoSQL
BdD relationnelle MongoDB
Gouvernance des
données
Validation du document et
Schéma JSON
Triggers Change Streams (3.6+)
Jointures $lookup (externe gauche)
Index et vues ✔ et ✔
GROUP BY Framework d'agrégation
NoSQL MongoDB
Haute disponibilité Replica Sets
Scalabilité Sharding
Standalone / Local dev
Standalone
Replica Sets
Cluster shardé
MongoDB - le meilleur des deux mondes
Fondations du SGBDR Avantages de NoSQL
Langage d'interrogation
expressif et index secondaires
Intégrité des données
Gestion d'entreprise et
intégrations
La flexibilité
Évolutivité et performance
Déploiement global et
toujours disponible
#1 BdD à la croissance
la plus rapide + de 30 millions téléchargements
uniques
4e BdD la plus populaire + de 5.000 clients payants
+ de 50.000 membres du groupe
d'utilisateurs MongoDB 75% clients du
Global 500
+ de 500.000 étudiants en ligne + de 3.000 clients
Atlas
Développement local
npm install mongodb --save
mongod --dbpath /data
Télécharger Compass
mongod
Écriture de données
Compass
Trouvez des restaurants à moins de 1 km du métro
Pigalle qui servent la cuisine japonaise
{
"name": "Puce",
"telephone": "0953482975",
"site": "http://ilovepuce.com/",
"code_postal": "75009",
"location": {
"type": "Point",
"coordinates": [2.33761, 48.8834]
},
"cuisine": ["japonaise", "mexicaine", "française"],
"menu": [
{ "desc": "Jambon Ibérique bellota bellota", "price": 13.0 },
{ "desc": "Fromages", "price": 8.5 }
]
}
Document
Requêtes expressives
db.restaurants.find({
"location": {
"$geoWithin": {
"$centerSphere": [
[2.337573, 48.8835],
0.0001569
]
}
},
"cuisine": "japonaise"
});
Requête de
géolocalisation
GPS de
Metro Pigalle
1 km en radians
"cuisine" peut
être un tableau
Index riches
{
"name": "Puce",
"telephone": "0953482975" ,
"site": "http://ilovepuce.com/",
"location": {
"type": "Point",
"coordinates": [2.33761, 48.8834]
},
"cuisine": ["japonaise", "mexicaine", "française"],
"menu": [
{ "desc": "Jambon Ibérique bellota bellota", "price": 13.0 },
{ "desc": "Fromages", "price": 8.5 }
]
}
db.restaurants.createIndex({
"location": "2dsphere",
"cuisine": 1
}
Demo
Données de test avec mgeneratejs
Framework d'agrégation
db.restaurants.aggregate([
{"$match": {"code_postal": "75009"}},
{"$unwind": "$cuisine" },
{"$group": { _id: "$cuisine", total: { "$sum": 1 }}},
{"$sort": { total: -1 }},
{"$limit": 10}
]);
Trouver les cuisines les plus populaire dans le 9eme
Afficher les 10 cuisines les plus populaires
Construisons une application!
Le stack MEAN
Driver MongoDB
et / ou Mongoose
Driver ou ODM?
Driver officiel
Support des dernières
fonctionnalités
Pas un ODM
3ème partie
Peut ne pas supporter les
dernières fonctionnalités
ODM
De facto avec MEAN
App - Questions & applaudissements👏
Le chemin vers Serverless:
DBaaS
MongoDB Atlas: DBaaS dans le Cloud
Libre service, élastique
et automatisé
Sécurisé par défaut
Monitoring et métriques
complètes
Globale et haute
disponibilité
Sauvegardes continues et
interrogeables.
Migrations
Organisations, équipes
et projets
Mise à jour pour se connecter à Atlas
1. Sécurité
● RBAC (utilisateur et autorisations)
● Liste blanche d'IP
2. Mettre à jour la chaîne de connexion
- SRV e.g.
mongodb+srv://nic:<PASSWORD>@tse-nic-vy6re.mong
odb.net/test?retryWrites=true
3. Migrate data
● mongoimport
● Atlas Live Import
Atlas
Wizard
On a appris quoi?
Basics
De plus? Serverless Architectures Webinar:
https://www.mongodb.com/presentations/webinar-serverless-architectures-with-aws-lamb
da-and-mongodb-atlas
Atlas Compass
Thank You!
Merci! Tack!
Cours M001 et M220
Questions?

Construisez votre première application MongoDB

  • 2.
    Votre première appMongoDB Nic Cottrell, Ingénieur Services Techniques, MongoDB 4 décembre 2018 Paris, France
  • 3.
    Les bases deMongoDB: ● Collections, ● Documents JSON, ● CRUD, ● Indexes, ● Aggregation Framework Visualiser les données MongoDB Application simple sur le stack MEAN Agenda
  • 4.
    Nicholas Cottrell Technical ServicesEngineer nicholas.cottrell@mongodb.com Normandie, France stackoverflow.com/users/543315/nic-cottrell github.com/niccottrell/mongodb-paris-2018
  • 5.
  • 6.
    Dynamique et Naturel Rigide et Normalisé { "_id":"Emp123", "nom": "Jean Leblanc", "titre": "Dev superstar", "telephones": [ "0123456789", "063456789"] } Id (VARCHAR) Nom (VARCHAR) Emp123 Jean Leblanc Id (VARCHAR) PhoneId (Int) Emp123 456 Emp123 567 PhoneId Phone (VARCHAR) 456 0123456789 567 063456789 vs
  • 7.
    { "_id": 123, "nom": "JeanLeblanc", "hps": NumberDecimal("37.5"), "telephones": [ "0123456789", "063456789"], "commence": ISODate("2016-10-05"), "bureau": { "ville": "Paris", "lieu": { type: "Point", coordinates: [2.3333, 48.86] } }, "equipe": [ { "id": 189, "nom": "Camille Martin"}, { "id": 256, "nom": "Maxime Lefevre" }, ... ] } Les documents - structures de données riches Champs Nombre entier Chaîne de caractères Géo-localisation Nombre à virgule flottante Tableau de sous-documents Date Décimal
  • 8.
    { "_id": 123, "nom": "JeanLeblanc", "hps": NumberDecimal("37.5"), "telephones": [ "0123456789", "063456789"], "commence": ISODate("2016-10-05"), "bureau": { "ville": "Paris", "lieu": { type: "Point", coordinates: [2.3333, 48.86] } }, "equipe": [ { "id": 189, "nom": "Camille Martin"}, { "id": 256, "nom": "Maxime Lefevre" }, ... ] ... Les documents - structures de données riches Champs Nombre entier Chaîne de caractères Géo-localisation Nombre à virgule flottante Tableau de sous-documents Interroger et indexer des données à n'importe quel niveau Date Décimal
  • 9.
    { "_id": 284, "nom": "MelanieMercier" "titre": "Developpeur senior" "commence": ISODate("2017-06-11") "competences": ["java", "nodejs", "spring data"], "device": "MacBook Pro 15", ... } Les documents sont flexibles { "_id": 123, "nom": "Jean Leblanc" "titre": "Chef superstar" "telephones": [ "0123456789", "063456789"] "commence": ISODate("2016-10-05") … } Schéma polymorphes - aligné avec les principes de la POO
  • 10.
    { "_id": 284, "nom": "MelanieMercier" "titre": "Developpeur senior" "commence": ISODate("2017-06-11") "competences": ["java", "nodejs", "spring data"], "device": "MacBook Pro 15", ... } Les documents sont flexibles { "_id": 123, "nom": "Jean Leblanc" "titre": "Chef superstar" "telephones": [ "0123456789", "063456789"] "commence": ISODate("2016-10-05") … } Schéma polymorphes - aligné avec les principes de la POO db.staff.find({titre: /^Developpeur/}, {nom: 1, competences: 1})
  • 11.
    SQL vs NoSQL BdDrelationnelle MongoDB Gouvernance des données Validation du document et Schéma JSON Triggers Change Streams (3.6+) Jointures $lookup (externe gauche) Index et vues ✔ et ✔ GROUP BY Framework d'agrégation
  • 12.
    SQL vs NoSQL BdDrelationnelle MongoDB Gouvernance des données Validation du document et Schéma JSON Triggers Change Streams (3.6+) Jointures $lookup (externe gauche) Index et vues ✔ et ✔ GROUP BY Framework d'agrégation NoSQL MongoDB Haute disponibilité Replica Sets Scalabilité Sharding
  • 13.
    Standalone / Localdev Standalone
  • 14.
  • 15.
  • 16.
    MongoDB - lemeilleur des deux mondes Fondations du SGBDR Avantages de NoSQL Langage d'interrogation expressif et index secondaires Intégrité des données Gestion d'entreprise et intégrations La flexibilité Évolutivité et performance Déploiement global et toujours disponible #1 BdD à la croissance la plus rapide + de 30 millions téléchargements uniques 4e BdD la plus populaire + de 5.000 clients payants + de 50.000 membres du groupe d'utilisateurs MongoDB 75% clients du Global 500 + de 500.000 étudiants en ligne + de 3.000 clients Atlas
  • 17.
    Développement local npm installmongodb --save mongod --dbpath /data Télécharger Compass
  • 18.
  • 19.
  • 20.
  • 21.
    Trouvez des restaurantsà moins de 1 km du métro Pigalle qui servent la cuisine japonaise
  • 22.
    { "name": "Puce", "telephone": "0953482975", "site":"http://ilovepuce.com/", "code_postal": "75009", "location": { "type": "Point", "coordinates": [2.33761, 48.8834] }, "cuisine": ["japonaise", "mexicaine", "française"], "menu": [ { "desc": "Jambon Ibérique bellota bellota", "price": 13.0 }, { "desc": "Fromages", "price": 8.5 } ] } Document
  • 23.
    Requêtes expressives db.restaurants.find({ "location": { "$geoWithin":{ "$centerSphere": [ [2.337573, 48.8835], 0.0001569 ] } }, "cuisine": "japonaise" }); Requête de géolocalisation GPS de Metro Pigalle 1 km en radians "cuisine" peut être un tableau
  • 24.
    Index riches { "name": "Puce", "telephone":"0953482975" , "site": "http://ilovepuce.com/", "location": { "type": "Point", "coordinates": [2.33761, 48.8834] }, "cuisine": ["japonaise", "mexicaine", "française"], "menu": [ { "desc": "Jambon Ibérique bellota bellota", "price": 13.0 }, { "desc": "Fromages", "price": 8.5 } ] } db.restaurants.createIndex({ "location": "2dsphere", "cuisine": 1 }
  • 25.
    Demo Données de testavec mgeneratejs
  • 26.
    Framework d'agrégation db.restaurants.aggregate([ {"$match": {"code_postal":"75009"}}, {"$unwind": "$cuisine" }, {"$group": { _id: "$cuisine", total: { "$sum": 1 }}}, {"$sort": { total: -1 }}, {"$limit": 10} ]); Trouver les cuisines les plus populaire dans le 9eme Afficher les 10 cuisines les plus populaires
  • 27.
  • 28.
    Le stack MEAN DriverMongoDB et / ou Mongoose
  • 29.
    Driver ou ODM? Driverofficiel Support des dernières fonctionnalités Pas un ODM 3ème partie Peut ne pas supporter les dernières fonctionnalités ODM De facto avec MEAN
  • 30.
    App - Questions& applaudissements👏
  • 31.
    Le chemin versServerless: DBaaS
  • 32.
    MongoDB Atlas: DBaaSdans le Cloud Libre service, élastique et automatisé Sécurisé par défaut Monitoring et métriques complètes Globale et haute disponibilité Sauvegardes continues et interrogeables. Migrations Organisations, équipes et projets
  • 33.
    Mise à jourpour se connecter à Atlas 1. Sécurité ● RBAC (utilisateur et autorisations) ● Liste blanche d'IP 2. Mettre à jour la chaîne de connexion - SRV e.g. mongodb+srv://nic:<PASSWORD>@tse-nic-vy6re.mong odb.net/test?retryWrites=true 3. Migrate data ● mongoimport ● Atlas Live Import
  • 34.
  • 35.
    On a apprisquoi? Basics De plus? Serverless Architectures Webinar: https://www.mongodb.com/presentations/webinar-serverless-architectures-with-aws-lamb da-and-mongodb-atlas Atlas Compass
  • 36.
  • 37.