SlideShare a Scribd company logo
1 of 29
A Guide to the MEAN Stack
Tips and Tricks for using MongoDB and NodeJS
in overwhelmingly awesome ways
Valeri Karpov
CTO, Ascot Project
www.thecodebarbarian.com
@code_barbarian
github.com/vkarpov15
What is The Ascot Project?
Making fashion geek-friendly
Less like this More like this
Who is this guy?
- Academy for Telecommunications and
Computer Science '07, Princeton CS '11
- Co-founder and CTO, SCVNGR in '08
- Google intern '09, mentored by Misko
Hevery
- Tower Research Capital '11 – '13
- Developed Ascot Project at AngelHack
DC in '12
What is this all about?
- Why Ascot uses MongoDB
- What's the MEAN stack and why its awesome
- How MongoDB fits in the MEAN stack
- Why MongooseJS is important and tradeoffs in it's usage
- Example of a cool MEAN stack web app
Why MongoDB?
1) It's cool
2) No joins for nested data
3) Flexible and simple
SQL is Annoying
MEAN Stack
Web dev framework for NodeJS
Superheroic frontend framework
Event-based concurrency environment
MEAN Stack – Why do I care?
- Write one language
- With MongoDB and Mongoose, easy and flexible data
validation
- With NodeJS, never need threads
- With AngularJS, dynamic client-side templates
Same Language, Same Objects
{ "_id" : ObjectId("5161a58b46341f8a46000003"),
"username" : "vkarpov" }
{ "_id" : "5161a58b46341f8a46000003",
"username" : "vkarpov" }
{ "_id" : "5161a58b46341f8a46000003",
"username" : "vkarpov" }
How MongooseJS Works
MongooseJS – code-defined schemas for MongoDB + NodeJS
- MongoDB and NodeJS are best friends
- No built-in schemas or validation
- But, MongoDB native wrapper for NodeJS is lacking:
How MongooseJS Works
MongooseJS – code-defined schemas for MongoDB + NodeJS
Primary MongooseJS types:
- Schema – structure defining how documents look
- Connection – Wrapper around database connection
- Model = Schema + Connection + collection name
- Document is an instantiation of a Model
How MongooseJS Works
A Basic MongooseJS Schema
How MongooseJS Works
Using the StockPrice Model
How MongooseJS Works
Sometimes being able to save anything isn't right
How MongooseJS Works
Helpful Error Messages
- Nested JSON errors
summary
- Can use this for very
generic form validation
- More on this later
How MongooseJS Works
Nesting and populating MongooseJS Schemas – an important
distinction that doesn't exist in SQL
Populate – similar to SQL join
Nest – re-use schema in another
schema
How MongooseJS Works
Can't do multi-level population!
How MongooseJS Works
Nesting and populating MongooseJS Schemas
When can we use nested schemas?
Many-to-one
One-to-many
One-to-one
Many-to-many
MEAN Stack Superpowers
NodeJS is not just a Javascript web server
- Event based concurrency
- Package manager similar to Rails gems
- Makes multithreaded servers easy
Example: Bitcoins!
Bitcoin P&L
Step 1 : Web app to display a streaming Bitcoin ticker
- Complex problem – multiple threads, sockets, mutex, etc.
- People in HFT get paid crazy money to do this in C++
Bitcoin P&L
- Enter NodeJS, where this is a back-of-napkin type problem
Bitcoin P&L
- Update frontend periodically? AngularJS makes it easy
Bitcoin P&L
Takeaways
- General problem : your server connecting to other servers
- Example : Ascot links
- Can write multi-threaded servers, but why?
- General problem : updating page without reload
- AngularJS two-way data binding
Bitcoin P&L + MongoDB
Model – list of nested stock schemas Routes – get list of stocks, add a new stock
Bitcoin P&L + MongoDB
AngularJS – generic no-reload form wrapper
Bitcoin P&L + MongoDB
Jade – A View To A Kill And the result:
Takeaways
- MEAN Stack is awesome
- Sophisticated frontends
- Multithreaded backends made easy
- MongooseJS helps NodeJS and MongoDB play nice
- Limitations on MongooseJS population
Thanks for Listening!
Further Reading
- Ascot Project : www.ascotproject.com
- AngularJS Form Validation : “How to Easily Validate Any Form
Ever Using AngularJS” @ www.thecodebarbarian.com
- SocketIO Bitcoin Price Streaming : mtgox-socket-client on NPM
and Github
- Bitcoin realtime P&L : github.com/vkarpov15/bitcoin-pnl,
coming soon to www.thecodebarbarian.com

More Related Content

What's hot

Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Simplilearn
 

What's hot (20)

Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker Compose
 
Nodejs presentation
Nodejs presentationNodejs presentation
Nodejs presentation
 
Node js
Node jsNode js
Node js
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 
WEB DEVELOPMENT USING REACT JS
 WEB DEVELOPMENT USING REACT JS WEB DEVELOPMENT USING REACT JS
WEB DEVELOPMENT USING REACT JS
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Vue 2 vs Vue 3.pptx
Vue 2 vs Vue 3.pptxVue 2 vs Vue 3.pptx
Vue 2 vs Vue 3.pptx
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 
React hooks
React hooksReact hooks
React hooks
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개
 
Angular App Presentation
Angular App PresentationAngular App Presentation
Angular App Presentation
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Getting Started with React.js
Getting Started with React.jsGetting Started with React.js
Getting Started with React.js
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorial
 
Android Jetpack
Android Jetpack Android Jetpack
Android Jetpack
 
reactJS
reactJSreactJS
reactJS
 
AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0
 
.Net Core
.Net Core.Net Core
.Net Core
 

Viewers also liked

Introduction To Single Page Application
Introduction To Single Page ApplicationIntroduction To Single Page Application
Introduction To Single Page Application
KMS Technology
 

Viewers also liked (15)

Introduction to the MEAN stack
Introduction to the MEAN stackIntroduction to the MEAN stack
Introduction to the MEAN stack
 
Does my DIV look big in this?
Does my DIV look big in this?Does my DIV look big in this?
Does my DIV look big in this?
 
Single Page Application presentation
Single Page Application presentationSingle Page Application presentation
Single Page Application presentation
 
MEAN Stack
MEAN StackMEAN Stack
MEAN Stack
 
Single Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJSSingle Page Application (SPA) using AngularJS
Single Page Application (SPA) using AngularJS
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applications
 
Get MEAN! Node.js and the MEAN stack
Get MEAN!  Node.js and the MEAN stackGet MEAN!  Node.js and the MEAN stack
Get MEAN! Node.js and the MEAN stack
 
Introduction To Single Page Application
Introduction To Single Page ApplicationIntroduction To Single Page Application
Introduction To Single Page Application
 
AngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get startedAngularJS 101 - Everything you need to know to get started
AngularJS 101 - Everything you need to know to get started
 
AngularJS application architecture
AngularJS application architectureAngularJS application architecture
AngularJS application architecture
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 
AngularJS Basics with Example
AngularJS Basics with ExampleAngularJS Basics with Example
AngularJS Basics with Example
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
 

Similar to The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js

Backend Development Bootcamp - Node [Online & Offline] In Bangla
Backend Development Bootcamp - Node [Online & Offline] In BanglaBackend Development Bootcamp - Node [Online & Offline] In Bangla
Backend Development Bootcamp - Node [Online & Offline] In Bangla
Stack Learner
 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
Rob Davarnia
 
MongoDB and the MEAN Stack
MongoDB and the MEAN StackMongoDB and the MEAN Stack
MongoDB and the MEAN Stack
MongoDB
 

Similar to The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js (20)

MEAN Stack - Google Developers Live 10/03/2013
MEAN Stack - Google Developers Live 10/03/2013MEAN Stack - Google Developers Live 10/03/2013
MEAN Stack - Google Developers Live 10/03/2013
 
Open-Source Analytics Stack on MongoDB, with Schema, Pierre-Alain Jachiet and...
Open-Source Analytics Stack on MongoDB, with Schema, Pierre-Alain Jachiet and...Open-Source Analytics Stack on MongoDB, with Schema, Pierre-Alain Jachiet and...
Open-Source Analytics Stack on MongoDB, with Schema, Pierre-Alain Jachiet and...
 
Create Restful Web Application With Node.js Express Framework
Create Restful Web Application With Node.js Express FrameworkCreate Restful Web Application With Node.js Express Framework
Create Restful Web Application With Node.js Express Framework
 
LAMP is so yesterday, MEAN is so tomorrow! :)
LAMP is so yesterday, MEAN is so tomorrow! :) LAMP is so yesterday, MEAN is so tomorrow! :)
LAMP is so yesterday, MEAN is so tomorrow! :)
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
NodeSummit - MEAN Stack
NodeSummit - MEAN StackNodeSummit - MEAN Stack
NodeSummit - MEAN Stack
 
Backend Development Bootcamp - Node [Online & Offline] In Bangla
Backend Development Bootcamp - Node [Online & Offline] In BanglaBackend Development Bootcamp - Node [Online & Offline] In Bangla
Backend Development Bootcamp - Node [Online & Offline] In Bangla
 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
 
Angular js workshop
Angular js workshopAngular js workshop
Angular js workshop
 
The mean stack
The mean stackThe mean stack
The mean stack
 
MongoDB and the MEAN Stack
MongoDB and the MEAN StackMongoDB and the MEAN Stack
MongoDB and the MEAN Stack
 
NoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionNoSQL and MongoDB Introdction
NoSQL and MongoDB Introdction
 
Js foo - Sept 8 upload
Js foo - Sept 8 uploadJs foo - Sept 8 upload
Js foo - Sept 8 upload
 
Meanstack overview
Meanstack overviewMeanstack overview
Meanstack overview
 
AngularJS + NancyFx + MongoDB = The best trio for ultimate SPA by Bojan Velja...
AngularJS + NancyFx + MongoDB = The best trio for ultimate SPA by Bojan Velja...AngularJS + NancyFx + MongoDB = The best trio for ultimate SPA by Bojan Velja...
AngularJS + NancyFx + MongoDB = The best trio for ultimate SPA by Bojan Velja...
 
Beyond the MEAN Stack: Thinking Small with Node.js for the Enterprise
Beyond the MEAN Stack: Thinking Small with Node.js for the EnterpriseBeyond the MEAN Stack: Thinking Small with Node.js for the Enterprise
Beyond the MEAN Stack: Thinking Small with Node.js for the Enterprise
 
Building an E-commerce website in MEAN stack
Building an E-commerce website in MEAN stackBuilding an E-commerce website in MEAN stack
Building an E-commerce website in MEAN stack
 
Node PDX: Intro to Sails.js
Node PDX: Intro to Sails.jsNode PDX: Intro to Sails.js
Node PDX: Intro to Sails.js
 
Node.js and MongoDB from scratch, fully explained and tested
Node.js and MongoDB from scratch, fully explained and tested Node.js and MongoDB from scratch, fully explained and tested
Node.js and MongoDB from scratch, fully explained and tested
 
TDD a REST API With Node.js and MongoDB
TDD a REST API With Node.js and MongoDBTDD a REST API With Node.js and MongoDB
TDD a REST API With Node.js and MongoDB
 

More from MongoDB

More from MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Recently uploaded

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js

  • 1. A Guide to the MEAN Stack Tips and Tricks for using MongoDB and NodeJS in overwhelmingly awesome ways Valeri Karpov CTO, Ascot Project www.thecodebarbarian.com @code_barbarian github.com/vkarpov15
  • 2. What is The Ascot Project? Making fashion geek-friendly Less like this More like this
  • 3. Who is this guy? - Academy for Telecommunications and Computer Science '07, Princeton CS '11 - Co-founder and CTO, SCVNGR in '08 - Google intern '09, mentored by Misko Hevery - Tower Research Capital '11 – '13 - Developed Ascot Project at AngelHack DC in '12
  • 4. What is this all about? - Why Ascot uses MongoDB - What's the MEAN stack and why its awesome - How MongoDB fits in the MEAN stack - Why MongooseJS is important and tradeoffs in it's usage - Example of a cool MEAN stack web app
  • 5. Why MongoDB? 1) It's cool 2) No joins for nested data 3) Flexible and simple
  • 7. MEAN Stack Web dev framework for NodeJS Superheroic frontend framework Event-based concurrency environment
  • 8. MEAN Stack – Why do I care? - Write one language - With MongoDB and Mongoose, easy and flexible data validation - With NodeJS, never need threads - With AngularJS, dynamic client-side templates
  • 9. Same Language, Same Objects { "_id" : ObjectId("5161a58b46341f8a46000003"), "username" : "vkarpov" } { "_id" : "5161a58b46341f8a46000003", "username" : "vkarpov" } { "_id" : "5161a58b46341f8a46000003", "username" : "vkarpov" }
  • 10. How MongooseJS Works MongooseJS – code-defined schemas for MongoDB + NodeJS - MongoDB and NodeJS are best friends - No built-in schemas or validation - But, MongoDB native wrapper for NodeJS is lacking:
  • 11. How MongooseJS Works MongooseJS – code-defined schemas for MongoDB + NodeJS Primary MongooseJS types: - Schema – structure defining how documents look - Connection – Wrapper around database connection - Model = Schema + Connection + collection name - Document is an instantiation of a Model
  • 12. How MongooseJS Works A Basic MongooseJS Schema
  • 13. How MongooseJS Works Using the StockPrice Model
  • 14. How MongooseJS Works Sometimes being able to save anything isn't right
  • 15. How MongooseJS Works Helpful Error Messages - Nested JSON errors summary - Can use this for very generic form validation - More on this later
  • 16. How MongooseJS Works Nesting and populating MongooseJS Schemas – an important distinction that doesn't exist in SQL Populate – similar to SQL join Nest – re-use schema in another schema
  • 17. How MongooseJS Works Can't do multi-level population!
  • 18. How MongooseJS Works Nesting and populating MongooseJS Schemas When can we use nested schemas? Many-to-one One-to-many One-to-one Many-to-many
  • 19. MEAN Stack Superpowers NodeJS is not just a Javascript web server - Event based concurrency - Package manager similar to Rails gems - Makes multithreaded servers easy
  • 21. Bitcoin P&L Step 1 : Web app to display a streaming Bitcoin ticker - Complex problem – multiple threads, sockets, mutex, etc. - People in HFT get paid crazy money to do this in C++
  • 22. Bitcoin P&L - Enter NodeJS, where this is a back-of-napkin type problem
  • 23. Bitcoin P&L - Update frontend periodically? AngularJS makes it easy
  • 24. Bitcoin P&L Takeaways - General problem : your server connecting to other servers - Example : Ascot links - Can write multi-threaded servers, but why? - General problem : updating page without reload - AngularJS two-way data binding
  • 25. Bitcoin P&L + MongoDB Model – list of nested stock schemas Routes – get list of stocks, add a new stock
  • 26. Bitcoin P&L + MongoDB AngularJS – generic no-reload form wrapper
  • 27. Bitcoin P&L + MongoDB Jade – A View To A Kill And the result:
  • 28. Takeaways - MEAN Stack is awesome - Sophisticated frontends - Multithreaded backends made easy - MongooseJS helps NodeJS and MongoDB play nice - Limitations on MongooseJS population
  • 29. Thanks for Listening! Further Reading - Ascot Project : www.ascotproject.com - AngularJS Form Validation : “How to Easily Validate Any Form Ever Using AngularJS” @ www.thecodebarbarian.com - SocketIO Bitcoin Price Streaming : mtgox-socket-client on NPM and Github - Bitcoin realtime P&L : github.com/vkarpov15/bitcoin-pnl, coming soon to www.thecodebarbarian.com