Publicité
Publicité

Contenu connexe

Publicité

Node.js et MongoDB: Mongoose

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

Notes de l'éditeur

  1. \n
  2. \n
  3. MongoDb par la compagnie 10gen\n
  4. C’est un marriage NoSQL et SQL au sens où l’architecture de base est similaire.\n
  5. Base de données -> Collections -> Documents -> Documents -> etc.\n
  6. Tout simplement du JSON! J’adore.\n
  7. Une collection c’est pas mal un Array d’objets JSON.\n
  8. - 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
  9. \n
  10. - Pas trop recherché ça, je n’y suis pas encore rendu...\n- mais plus important... (next slide)\n
  11. - 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
  12. - 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
  13. - 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
  14. - 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
  15. - 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
  16. - 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
  17. - 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
  18. - 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
  19. - 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
  20. - 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
  21. - 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
  22. - 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
  23. - 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
  24. - 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
  25. - 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
  26. - 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
  27. - 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
  28. - 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
  29. 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
  30. Étant donnée que ce sont des données brutes, c’est difficile d’organiser son code et son architecture avec cette librairie.\n
  31. C’est là que Mongoose entre en jeu.\n
  32. - 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. - 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
  40. - 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
  41. - 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
  42. - 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
  43. - 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
  44. - 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
  45. - 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
  46. - 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. Petit projet devenu gros en Node.js qui utilise ces technologies\n
  54. 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
  55. \n
  56. - 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
  57. \n
Publicité