Node.js + MongoDB     Mongoose
@jeromegn★   Auto-didacte★   Développeur Front-End chez Flowtown★   Readab.ly★   Backbone Todos
MongoDB  10gen
Équivalences    MySQL             MongoDBBases de données   Bases de données    Tableaux         Collections    Rangées   ...
Structure “embeddée”Base de données Collection       Collection  Document         Document  Document         Document     ...
Document == JSON
Collection == Array
Requêtes == JS
Demo
Performances? Extensibilité?     (Scalability)
Performances? Extensibilité?     (Scalability)       Yep!
Flexibilité
Flexibilité    MigrationsSchémas prédéfinis
Flexibilité“Schemaless”
MapReduce
map
map
reduce
reduce
mapReduce
npm install mongodb
npm install mongodb• Implémentation native
npm install mongodb• Implémentation native• Inspiré par le “driver” Ruby
npm install mongodb• Implémentation native• Inspiré par le “driver” Ruby• 100% asynchrone
npm install mongodb• Implémentation native• Inspiré par le “driver” Ruby• 100% asynchrone• github.com/christkv/node-mongod...
Exemple: Insert
Exemple: Insert
Exemple: Insert
Exemple: Insert
Exemple: Insert
++;• “Bare-metal”• Nativité• Simplicité• Données brutes
--;Organisation du code
Mongoose LearnBoost
Avantages• Modèles (“Classes”)• Middlewares• Validation
Définition d’un modèle
Définition d’un modèle
Définition d’un modèle
Modèle “embeddé”
Modèle “embeddé”
Modèle “embeddé”
Instantiation et sauvegarde
Instantiation et sauvegarde
Instantiation et sauvegarde
Instantiation et sauvegarde
Trouver des instances
Trouver des instances
Trouver des instances
Méthodes d’instance et middleware
Méthodes d’instance et middleware
Méthodes d’instance et middleware
Validations
Validations
Validations
Readab.ly
Environnement• Node.js• MongoDB    • Mongoose• Redis    • Kue (tjholowaychuk)• ... sur Dotcloud.com
Modèle `Twitter`
Merci
Node.js et MongoDB: Mongoose
Upcoming SlideShare
Loading in...5
×

Node.js et MongoDB: Mongoose

3,368

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,368
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
89
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • MongoDb par la compagnie 10gen\n
  • C’est un marriage NoSQL et SQL au sens où l’architecture de base est similaire.\n
  • Base de données -> Collections -> Documents -> Documents -> etc.\n
  • Tout simplement du JSON! J’adore.\n
  • Une collection c’est pas mal un Array d’objets JSON.\n
  • - Les requêtes sont faites dans notre langage préféré: le JavaScript. \n- MongoDB met à notre disposition beaucoup de méthodes sur leurs collections.\n- Dans le “shell” MongoDB on peut utiliser du JavaScript pour intéragir avec des objets.\n
  • \n
  • - Pas trop recherché ça, je n’y suis pas encore rendu...\n- mais plus important... (next slide)\n
  • - Les collections ne tiennent pas rigueur de schémas pour leurs documents.\n- C’est possible d’avoir des documents avec des propriétés complètements différentes dans une même collection\n
  • - Les collections ne tiennent pas rigueur de schémas pour leurs documents.\n- C’est possible d’avoir des documents avec des propriétés complètements différentes dans une même collection\n
  • - Les collections ne tiennent pas rigueur de schémas pour leurs documents.\n- C’est possible d’avoir des documents avec des propriétés complètements différentes dans une même collection\n
  • - C’est une des méthodes d’aggrégation implantées dans MongoDB\n- Pour ceux qui ne connaissent pas, c’est simplement une manière de faire des opérations en batch et d’aggréger les résultats.\n- Je ne suis pas expert là dedans, mais assez pour l’introduire.\n
  • - Si on veut savoir quels tags reviennent le plus dans les documents d’une collection par exemple\n- La fonction peur “émettre” autant de fois qu’elle veut à la fonction de réduction, étant donné qu’on pourrait avoir plusieurs tags dans notre document, on veut looper pour émettre chaque tag 1 fois.\n
  • - Notre fonction reduce prend deux paramètres: \n- une “clé” à laquelle on assignera la valeure finale (le “count”)\n- les valeurs qu’on doit “processer”\n- Dans ce cas si, pour chaque fois qu’on a une “clé” certaine clé, on additionne le nombre de fois qu’elle a été rencontré.\n- Désolé pour la clareté je suis encore en train d’apprendre ce bout.\n
  • - Ensuite on roule la fonction mapReduce sur une collection.\n- On peut retourner les valeurs dans une autre collection ou bien, comme dans cet exemple, les retourner directement dans la console.\n
  • - Implémentation native en JavaScript\n- Inspiré par le driver en Ruby qui est officiellement maintenu par 10gen (la compagnie qui a créé MongoDB)\n- 100% asynchrone, ça ne bloque pas, comme il se doit sur node.js\n- disponible sur github évidemment\n
  • - Implémentation native en JavaScript\n- Inspiré par le driver en Ruby qui est officiellement maintenu par 10gen (la compagnie qui a créé MongoDB)\n- 100% asynchrone, ça ne bloque pas, comme il se doit sur node.js\n- disponible sur github évidemment\n
  • - Implémentation native en JavaScript\n- Inspiré par le driver en Ruby qui est officiellement maintenu par 10gen (la compagnie qui a créé MongoDB)\n- 100% asynchrone, ça ne bloque pas, comme il se doit sur node.js\n- disponible sur github évidemment\n
  • - Implémentation native en JavaScript\n- Inspiré par le driver en Ruby qui est officiellement maintenu par 10gen (la compagnie qui a créé MongoDB)\n- 100% asynchrone, ça ne bloque pas, comme il se doit sur node.js\n- disponible sur github évidemment\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • - Petit exemple de insert dans une collection:\n- crée la connection\n- définir quelle collection utiliser (remarquez qu’on a pas besoin de la créer!\n- On insère dans la collection une entrée avec la clé “a” et la valeur 2\n- La fonction retourne une erreur s’il y en a une (comme il se doit sur node) et les documents insérés sous forme d’une Array (je pense)\n
  • Quelques avantages:\n- Bare-metal, on ne peut pas être plus proche de MongoDB que ça sauf directement dans le shell.\n- API très simple et très proche de celle offerte dans le shell MongoDB\n- Parfait pour travailler avec des données brutes\n
  • Étant donnée que ce sont des données brutes, c’est difficile d’organiser son code et son architecture avec cette librairie.\n
  • C’est là que Mongoose entre en jeu.\n
  • - Permet d’organiser son code plus habituellement avec des modèles\n- Ces modèles ont des middleware un peu comme les méthodes de before et after dans ActiveRecord sous Rails\n- Validation des entrées dans la base données au moment de la sauvegarde\n- et plus...\n
  • Facile de définir un modèle\n- On spécifie son schéma à l’aide d’une structure JSON\n- Puis on l’ajoute aux modèles “trackés” par mongoose (qui va gérer la connection, les collections, etc.)\n\n
  • Facile de définir un modèle\n- On spécifie son schéma à l’aide d’une structure JSON\n- Puis on l’ajoute aux modèles “trackés” par mongoose (qui va gérer la connection, les collections, etc.)\n\n
  • Facile de définir un modèle\n- On spécifie son schéma à l’aide d’une structure JSON\n- Puis on l’ajoute aux modèles “trackés” par mongoose (qui va gérer la connection, les collections, etc.)\n\n
  • Mongoose supporte l’embeddation de documents dans d’autres. On peut les définir comme un Array de modèles dans un autre modèle.\n
  • Mongoose supporte l’embeddation de documents dans d’autres. On peut les définir comme un Array de modèles dans un autre modèle.\n
  • Mongoose supporte l’embeddation de documents dans d’autres. On peut les définir comme un Array de modèles dans un autre modèle.\n
  • - Comme l’instatiation d’un objet JavaScript\n- On peut aussi “pousser” des éléments embeddés dans l’Array de commentaires qu’on a créé auparavant\n- Ensuite on sauvegarde l’instance dans la base de données, ce qui nous retourn une erreur s’il y en a une.\n
  • - Comme l’instatiation d’un objet JavaScript\n- On peut aussi “pousser” des éléments embeddés dans l’Array de commentaires qu’on a créé auparavant\n- Ensuite on sauvegarde l’instance dans la base de données, ce qui nous retourn une erreur s’il y en a une.\n
  • - Comme l’instatiation d’un objet JavaScript\n- On peut aussi “pousser” des éléments embeddés dans l’Array de commentaires qu’on a créé auparavant\n- Ensuite on sauvegarde l’instance dans la base de données, ce qui nous retourn une erreur s’il y en a une.\n
  • - Comme l’instatiation d’un objet JavaScript\n- On peut aussi “pousser” des éléments embeddés dans l’Array de commentaires qu’on a créé auparavant\n- Ensuite on sauvegarde l’instance dans la base de données, ce qui nous retourn une erreur s’il y en a une.\n
  • - Comme l’instatiation d’un objet JavaScript\n- On peut aussi “pousser” des éléments embeddés dans l’Array de commentaires qu’on a créé auparavant\n- Ensuite on sauvegarde l’instance dans la base de données, ce qui nous retourn une erreur s’il y en a une.\n
  • - Trouver des documents avec Mongoose c’est assez simple. Accepte tous les mêmes paramètres que le shell MongoDB.\n- Retourne un Array d’instance de modèle Mongoose et non pas des objets brutes.\n
  • - Trouver des documents avec Mongoose c’est assez simple. Accepte tous les mêmes paramètres que le shell MongoDB.\n- Retourne un Array d’instance de modèle Mongoose et non pas des objets brutes.\n
  • - Trouver des documents avec Mongoose c’est assez simple. Accepte tous les mêmes paramètres que le shell MongoDB.\n- Retourne un Array d’instance de modèle Mongoose et non pas des objets brutes.\n
  • Les middlewares et les méthodes d’instance:\n- On a accès à pre et post pour plusieurs méthodes d’un modèle, ici en exemple on a avant la sauvegarde.\n- C’est possible de les rouler en parallèle ou bien en séries (ici en séries)\n\nLes méthodes sont créés en utilisant la fonction “method” sur le schéma.\n
  • Les middlewares et les méthodes d’instance:\n- On a accès à pre et post pour plusieurs méthodes d’un modèle, ici en exemple on a avant la sauvegarde.\n- C’est possible de les rouler en parallèle ou bien en séries (ici en séries)\n\nLes méthodes sont créés en utilisant la fonction “method” sur le schéma.\n
  • Les middlewares et les méthodes d’instance:\n- On a accès à pre et post pour plusieurs méthodes d’un modèle, ici en exemple on a avant la sauvegarde.\n- C’est possible de les rouler en parallèle ou bien en séries (ici en séries)\n\nLes méthodes sont créés en utilisant la fonction “method” sur le schéma.\n
  • On peut valider chaque clés de nos modèles avec une fonction ou un regexp + quelques fonctions built in comme min, max et required.\n
  • On peut valider chaque clés de nos modèles avec une fonction ou un regexp + quelques fonctions built in comme min, max et required.\n
  • On peut valider chaque clés de nos modèles avec une fonction ou un regexp + quelques fonctions built in comme min, max et required.\n
  • Petit projet devenu gros en Node.js qui utilise ces technologies\n
  • Roule sur DotCloud sous node.js, utilise MongoDB pour stocker ses données et Redis pour gérer ses queues de background jobs (avec la librairie Kue par le fameux TJ Holowaychuk)\n
  • \n
  • - Exemple du modèle Twitter dans Readab.ly. Fait usage de relations avec l’ID du user.\n- Ça me fera plaisir de montrer du code de Readab.ly plus tard pour les intéréssés.\n
  • \n
  • Node.js et MongoDB: Mongoose

    1. 1. Node.js + MongoDB Mongoose
    2. 2. @jeromegn★ Auto-didacte★ Développeur Front-End chez Flowtown★ Readab.ly★ Backbone Todos
    3. 3. MongoDB 10gen
    4. 4. Équivalences MySQL MongoDBBases de données Bases de données Tableaux Collections Rangées Documents
    5. 5. Structure “embeddée”Base de données Collection Collection Document Document Document Document Document Document Document
    6. 6. Document == JSON
    7. 7. Collection == Array
    8. 8. Requêtes == JS
    9. 9. Demo
    10. 10. Performances? Extensibilité? (Scalability)
    11. 11. Performances? Extensibilité? (Scalability) Yep!
    12. 12. Flexibilité
    13. 13. Flexibilité MigrationsSchémas prédéfinis
    14. 14. Flexibilité“Schemaless”
    15. 15. MapReduce
    16. 16. map
    17. 17. map
    18. 18. reduce
    19. 19. reduce
    20. 20. mapReduce
    21. 21. npm install mongodb
    22. 22. npm install mongodb• Implémentation native
    23. 23. npm install mongodb• Implémentation native• Inspiré par le “driver” Ruby
    24. 24. npm install mongodb• Implémentation native• Inspiré par le “driver” Ruby• 100% asynchrone
    25. 25. npm install mongodb• Implémentation native• Inspiré par le “driver” Ruby• 100% asynchrone• github.com/christkv/node-mongodb-native
    26. 26. Exemple: Insert
    27. 27. Exemple: Insert
    28. 28. Exemple: Insert
    29. 29. Exemple: Insert
    30. 30. Exemple: Insert
    31. 31. ++;• “Bare-metal”• Nativité• Simplicité• Données brutes
    32. 32. --;Organisation du code
    33. 33. Mongoose LearnBoost
    34. 34. Avantages• Modèles (“Classes”)• Middlewares• Validation
    35. 35. Définition d’un modèle
    36. 36. Définition d’un modèle
    37. 37. Définition d’un modèle
    38. 38. Modèle “embeddé”
    39. 39. Modèle “embeddé”
    40. 40. Modèle “embeddé”
    41. 41. Instantiation et sauvegarde
    42. 42. Instantiation et sauvegarde
    43. 43. Instantiation et sauvegarde
    44. 44. Instantiation et sauvegarde
    45. 45. Trouver des instances
    46. 46. Trouver des instances
    47. 47. Trouver des instances
    48. 48. Méthodes d’instance et middleware
    49. 49. Méthodes d’instance et middleware
    50. 50. Méthodes d’instance et middleware
    51. 51. Validations
    52. 52. Validations
    53. 53. Validations
    54. 54. Readab.ly
    55. 55. Environnement• Node.js• MongoDB • Mongoose• Redis • Kue (tjholowaychuk)• ... sur Dotcloud.com
    56. 56. Modèle `Twitter`
    57. 57. Merci
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×