SlideShare a Scribd company logo
1 of 39
MEAN Stack Introduction and Development
Jason Zucchetto
MongoDB
2
Agenda
• Developing a Sample Application
• The MEAN Stack Components
• MEAN Stack Components Explained for Our
Sample Application
3
MongoMart
• Simple application for searching and viewing
MongoDB swag
• All product information stored in MongoDB
• Github location for the sample application will be
shown at the end of this presentation
4
MongoMart
5
MongoMart
6
MEAN Stack Components
7
MongoDB
• Document Oriented Database (JSON document)
• Returns JSON results, making it very easy to
store and retrieve JSON documents from your
Node.js application
• Dynamic schema
• Advanced secondary indexes (similar to an
RDBMS)
• Replication and scaling
8
Express
• Most popular Node.js web framework
• Simple, pluggable, and fast
• Great tool for building REST APIs
• Allows us to easily create endpoints in our
application (e.g. /items/45)
9
Angular
• Javascript framework for client side MVC (model-
view-controller)
• Create single page webapps
• HTML is used as the template language
• Adds HTML elements/attributes and interprets
those elements/attributes
• Frontend of the MEAN stack
10
Node.js
• Our web server
• Used for server-side web applications
• “… event-driven architecture and a non-blocking
I/O API designed to optimize an application's
throughput and scalability for real-time web
applications”
11
Setting Up MongoDB for our MongoMart App
• Download MongoDB
• Extract and add /bin directory to system PATH
• Create data directory
• Start MongoDB and point to data directory
• Load dataset using mongoimport (instructions in
GitHub, link at the end of this presentation)
{
"_id" : 20,
"title" : "MongoDB University T-shirt",
"slogan" : "Show Your MDBU Alumni Status",
"description" : "Crafted from ultra-soft combed
cotton,
this essential t-shirt features sporty
contrast
tipping and MongoDB's signature
leaf.",
"stars" : 0,
"category" : "Apparel",
"img_url" : "/img/products/univ-tshirt.jpg",
"price" : 45
}
Document from “items” Collection
13
Querying “items” Collection
• Any field within the collection can be queried, e.g.
db.items.find( { “category” : “Apparel” } )
• Ideally, every query to the database uses an
index, to ensure we maintain fast performance as
the database grows in size
Using .explain() in the MongoDB Shell
> db.items.find({ "category" : "Apparel" }
).explain("executionStats")
{
…
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 6,
"executionTimeMillis" : 2,
"totalKeysExamined" : 6,
"totalDocsExamined" : 6,
"executionStages" : {
"stage" : "FETCH",
…
}
…
15
Item Reviews
• Several options
• Add a list of reviews to each “items” document
• Create a new collection called “reviews”, query
the collection for latest reviews for an item
• Create a collection called “reviews” and maintain
the last 10 reviews (or 10 most popular reviews)
in each “items” document (duplicating reviews
across the two collections)
16
Node.js
• Our webserver
• Easily clone the MongoMart github repo, install
needed dependencies, and run the server:
git clone <REPO>
npm install
npm start
17
What is NPM
● Bundled in the Node.js installer
● Dependency and management tool for Node.js
● Used for installing Node.js modules, such as
Express (which we’ll dive into next):
npm install express
18
Integrating Express Into MongoMart
● Express is a Node.js module to manage our
routes
● Initially, Express was installed, and the Express
generator for generating the complete structure
for an application
● Use the Express generator to generate the
MongoMart application
npm install express
npm install express-generator -g
express mongomart
19
Routes Generated By Express
// Within routes/users.js
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
20
Create New Routes for MongoMart Items
// Create new file routes/items.js
var express = require('express');
var router = express.Router();
/* GET all items */
router.get('/', function(req, res, next) {
// Query MongoDB for items
});
/* GET item by id */
router.get('/:id', function(req, res, next) {
// Query MongoDB for an item
});
module.exports = router;
21
● MongoDB running with sample data
● Node.js application created
● Express installed for managing routes (e.g.
/items) within our Node.js application
Recap MongoMart Progress
● Query MongoDB from our application’s routes
● Display items to the user via Angular
Next Steps
22
● ODM for writing MongoDB validation, casting,
and business logic
● Greater simplifies how we query and work with
MongoDB
Adding Mongoose to Our Application
npm install mongoose
23
Create a Model for a MongoMart Item
// In models/item.js
var mongoose = require("mongoose");
var ItemSchema = new mongoose.Schema({
_id: Number,
name: String,
title: String,
slogan: String,
description: String,
stars: Number,
category: {
type: String,
index: true
},
img_url: String,
price: Number
});
module.exports = mongoose.model('Item', ItemSchema);
24
Mongoose MongoDB query from our Node.js App
// In routes/items.js
var mongoose = require( 'mongoose' );
var Item = require(__dirname+'/../models/Item')
/* GET all items */
router.get('/', function(req, res, next) {
Item.find(function(err, items) {
if (err)
res.send(err);
res.json(items);
});
});
25
Mongoose MongoDB query from our Node.js App
// In routes/items.js
* GET item by id */
router.get('/:id', function(req, res, next) {
Item.findById({ "_id" : req.params.id }, function(err,
item) {
if (err)
res.send(err);
res.json(item);
});
});
26
● Angular is a Javascript framework
● Client side MVC
● Create single page webapps, define all views and
controllers in client side Javascript
● Since Angular is a client side framework, we’ll install via
bower
● Bower should be used for client side components
(bootstrap, Angular, etc.)
● npm for node.js dependencies (Express, Mongoose,
etc.)
Integrating Angular Into MongoMart
27
Integrating Angular Into MongoMart
bower install bootstrap // used for easy layouts/standard styles
bower install angular // the main angular.js file
bower install angular-route // needed for routing in angular
bower install angular-animate // animate transitions between views
bower install jquery // jquery library
ls bower_components/
Angular angular-animate angular-route bootstrap jquery
28
Integrating Angular Into MongoMart (index)
<!doctype html>
<html lang="en" ng-app="mongomartApp">
<head>
<meta charset="utf-8">
<title>MongoMart</title>
<link rel="stylesheet"
href="bower_components/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="stylesheets/style.css">
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="javascripts/app.js"></script>
<script src="javascripts/controllers.js"></script>
</head>
<body>
<div class="view-container"><div ng-view class="view-frame"></div></div>
</body>
</html>
29
Integrating Angular Into MongoMart (app.js)
var mongomartApp = angular.module('mongomartApp', ['ngRoute','mongomartControllers',
'ngAnimate']);
mongomartApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/items', {
templateUrl: 'partials/item-list.html',
controller: 'ItemListCtrl'
}).
when('/items/:itemId', {
templateUrl: 'partials/item-detail.html',
controller: 'ItemDetailCtrl'
}).
otherwise({
redirectTo: '/items'
});
}]);
30
Integrating Angular Into MongoMart (app.js)
31
Integrating Angular Into MongoMart
(controllers.js)
var mongomartControllers = angular.module('mongomartControllers', []);
mongomartControllers.controller('ItemListCtrl', ['$scope', '$http',
function($scope, $http) {
$http.get('http://localhost:3000/items').success(function(data) {
$scope.items = data;
});
$scope.itemOrder = 'title';
}]);
mongomartControllers.controller('ItemDetailCtrl', ['$scope', '$http', '$routeParams',
function($scope, $http, $routeParams) {
$scope.itemId = $routeParams.itemId;
$http.get('http://localhost:3000/items/' + $routeParams.itemId).success(function(data) {
$scope.item = data;
});
}]);
32
Integrating Angular Into MongoMart (item-
detail.html)
<div class="row">
<div class="col-md-8">
<img class="img-responsive" src="{{item.img_url}}" alt="">
</div>
<div class="col-md-4">
<h3>Product Description</h3>
<p>
{{item.description}}
</p>
</div>
</div>
33
● MongoDB as the backing database
● Express for routing in Node.js (e.g. /items)
● Angular for client side MVC, single page webapp
● Node.js as our application server
MEAN Stack for MongoMart
Our Node.js Application Structure
Client side components, such as Javascript libraries and
CSS (e.g. Bootstrap). Brief intro to Bower in the Angular
section of this presentation.
Our models using Mongoose
Publicly accessible static files, such as images and CSS.
Routes defined by express.
Templates populated by routes from above
app.js is our application’s starting place, this file is used to
load all dependencies and other Node.js files
35
MongoMart
36
MongoMart
37
Links
• MongoMart Github Location:
https://github.com/zuketo/meanstack
• MEAN Stack Course on Edx:
https://www.edx.org/course/introduction-
mongodb-using-mean-stack-mongodbx-m101x
#MDBDays
mongodb.com
Get your technical questions answered
In the foyer, 10:00 - 5:00
By appointment only – register in person
Tell me how I did today on Guidebook and enter for a
chance to win one of these
How to do it:
Download the Guidebook App
Search for MongoDB Silicon Valley
Submit session feedback

More Related Content

What's hot

Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
Rob Davarnia
 
MEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona WorkshopMEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona Workshop
Valeri Karpov
 

What's hot (20)

Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
 
MEAN stack
MEAN stackMEAN stack
MEAN stack
 
Mean Stack - An Overview
Mean Stack - An OverviewMean Stack - An Overview
Mean Stack - An Overview
 
Introduction to the MEAN stack
Introduction to the MEAN stackIntroduction to the MEAN stack
Introduction to the MEAN stack
 
MEAN Stack
MEAN StackMEAN Stack
MEAN Stack
 
NodeSummit - MEAN Stack
NodeSummit - MEAN StackNodeSummit - MEAN Stack
NodeSummit - MEAN Stack
 
Introduction to mean stack
Introduction to mean stackIntroduction to mean stack
Introduction to mean stack
 
Kickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with YeomanKickstarting Node.js Projects with Yeoman
Kickstarting Node.js Projects with Yeoman
 
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.jsThe MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
 
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! :)
 
The MEAN Stack
The MEAN StackThe MEAN Stack
The MEAN Stack
 
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
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
 
From MEAN to the MERN Stack
From MEAN to the MERN StackFrom MEAN to the MERN Stack
From MEAN to the MERN Stack
 
FULL stack -> MEAN stack
FULL stack -> MEAN stackFULL stack -> MEAN stack
FULL stack -> MEAN stack
 
Mean stack
Mean stackMean stack
Mean stack
 
Angular js introduction
Angular js introductionAngular js introduction
Angular js introduction
 
MEAN Stack
MEAN StackMEAN Stack
MEAN Stack
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
 
MEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona WorkshopMEAN Stack WeNode Barcelona Workshop
MEAN Stack WeNode Barcelona Workshop
 

Similar to MongoDB Days Silicon Valley: Building Applications with the MEAN Stack

SoCal Code Camp 2011 - ASP.NET MVC 4
SoCal Code Camp 2011 - ASP.NET MVC 4SoCal Code Camp 2011 - ASP.NET MVC 4
SoCal Code Camp 2011 - ASP.NET MVC 4
Jon Galloway
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesign
MongoDB APAC
 
Webinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting StartedWebinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting Started
MongoDB
 

Similar to MongoDB Days Silicon Valley: Building Applications with the MEAN Stack (20)

Novedades de MongoDB 3.6
Novedades de MongoDB 3.6Novedades de MongoDB 3.6
Novedades de MongoDB 3.6
 
SoCal Code Camp 2011 - ASP.NET MVC 4
SoCal Code Camp 2011 - ASP.NET MVC 4SoCal Code Camp 2011 - ASP.NET MVC 4
SoCal Code Camp 2011 - ASP.NET MVC 4
 
Angular js workshop
Angular js workshopAngular js workshop
Angular js workshop
 
MongoDB Days UK: Building Apps with the MEAN Stack
MongoDB Days UK: Building Apps with the MEAN StackMongoDB Days UK: Building Apps with the MEAN Stack
MongoDB Days UK: Building Apps with the MEAN Stack
 
AngularJS: an introduction
AngularJS: an introductionAngularJS: an introduction
AngularJS: an introduction
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesign
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Valentine with Angular js - Introduction
Valentine with Angular js - IntroductionValentine with Angular js - Introduction
Valentine with Angular js - Introduction
 
Back to Basics 2017: Mí primera aplicación MongoDB
Back to Basics 2017: Mí primera aplicación MongoDBBack to Basics 2017: Mí primera aplicación MongoDB
Back to Basics 2017: Mí primera aplicación MongoDB
 
React JS .NET
React JS .NETReact JS .NET
React JS .NET
 
Back to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDBBack to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDB
 
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
 
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle StudiosAngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
 
Webinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting StartedWebinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting Started
 
Building a dashboard using AngularJS
Building a dashboard using AngularJSBuilding a dashboard using AngularJS
Building a dashboard using AngularJS
 
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
 
Angular 2 for Java Developers
Angular 2 for Java DevelopersAngular 2 for Java Developers
Angular 2 for Java Developers
 
Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]
 
Webinar: Get Started with the MEAN Stack
Webinar: Get Started with the MEAN StackWebinar: Get Started with the MEAN Stack
Webinar: Get Started with the MEAN Stack
 
AngularJS
AngularJSAngularJS
AngularJS
 

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

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
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...
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

MongoDB Days Silicon Valley: Building Applications with the MEAN Stack

  • 1. MEAN Stack Introduction and Development Jason Zucchetto MongoDB
  • 2. 2 Agenda • Developing a Sample Application • The MEAN Stack Components • MEAN Stack Components Explained for Our Sample Application
  • 3. 3 MongoMart • Simple application for searching and viewing MongoDB swag • All product information stored in MongoDB • Github location for the sample application will be shown at the end of this presentation
  • 7. 7 MongoDB • Document Oriented Database (JSON document) • Returns JSON results, making it very easy to store and retrieve JSON documents from your Node.js application • Dynamic schema • Advanced secondary indexes (similar to an RDBMS) • Replication and scaling
  • 8. 8 Express • Most popular Node.js web framework • Simple, pluggable, and fast • Great tool for building REST APIs • Allows us to easily create endpoints in our application (e.g. /items/45)
  • 9. 9 Angular • Javascript framework for client side MVC (model- view-controller) • Create single page webapps • HTML is used as the template language • Adds HTML elements/attributes and interprets those elements/attributes • Frontend of the MEAN stack
  • 10. 10 Node.js • Our web server • Used for server-side web applications • “… event-driven architecture and a non-blocking I/O API designed to optimize an application's throughput and scalability for real-time web applications”
  • 11. 11 Setting Up MongoDB for our MongoMart App • Download MongoDB • Extract and add /bin directory to system PATH • Create data directory • Start MongoDB and point to data directory • Load dataset using mongoimport (instructions in GitHub, link at the end of this presentation)
  • 12. { "_id" : 20, "title" : "MongoDB University T-shirt", "slogan" : "Show Your MDBU Alumni Status", "description" : "Crafted from ultra-soft combed cotton, this essential t-shirt features sporty contrast tipping and MongoDB's signature leaf.", "stars" : 0, "category" : "Apparel", "img_url" : "/img/products/univ-tshirt.jpg", "price" : 45 } Document from “items” Collection
  • 13. 13 Querying “items” Collection • Any field within the collection can be queried, e.g. db.items.find( { “category” : “Apparel” } ) • Ideally, every query to the database uses an index, to ensure we maintain fast performance as the database grows in size
  • 14. Using .explain() in the MongoDB Shell > db.items.find({ "category" : "Apparel" } ).explain("executionStats") { … "executionStats" : { "executionSuccess" : true, "nReturned" : 6, "executionTimeMillis" : 2, "totalKeysExamined" : 6, "totalDocsExamined" : 6, "executionStages" : { "stage" : "FETCH", … } …
  • 15. 15 Item Reviews • Several options • Add a list of reviews to each “items” document • Create a new collection called “reviews”, query the collection for latest reviews for an item • Create a collection called “reviews” and maintain the last 10 reviews (or 10 most popular reviews) in each “items” document (duplicating reviews across the two collections)
  • 16. 16 Node.js • Our webserver • Easily clone the MongoMart github repo, install needed dependencies, and run the server: git clone <REPO> npm install npm start
  • 17. 17 What is NPM ● Bundled in the Node.js installer ● Dependency and management tool for Node.js ● Used for installing Node.js modules, such as Express (which we’ll dive into next): npm install express
  • 18. 18 Integrating Express Into MongoMart ● Express is a Node.js module to manage our routes ● Initially, Express was installed, and the Express generator for generating the complete structure for an application ● Use the Express generator to generate the MongoMart application npm install express npm install express-generator -g express mongomart
  • 19. 19 Routes Generated By Express // Within routes/users.js var express = require('express'); var router = express.Router(); /* GET users listing. */ router.get('/', function(req, res, next) { res.send('respond with a resource'); }); module.exports = router;
  • 20. 20 Create New Routes for MongoMart Items // Create new file routes/items.js var express = require('express'); var router = express.Router(); /* GET all items */ router.get('/', function(req, res, next) { // Query MongoDB for items }); /* GET item by id */ router.get('/:id', function(req, res, next) { // Query MongoDB for an item }); module.exports = router;
  • 21. 21 ● MongoDB running with sample data ● Node.js application created ● Express installed for managing routes (e.g. /items) within our Node.js application Recap MongoMart Progress ● Query MongoDB from our application’s routes ● Display items to the user via Angular Next Steps
  • 22. 22 ● ODM for writing MongoDB validation, casting, and business logic ● Greater simplifies how we query and work with MongoDB Adding Mongoose to Our Application npm install mongoose
  • 23. 23 Create a Model for a MongoMart Item // In models/item.js var mongoose = require("mongoose"); var ItemSchema = new mongoose.Schema({ _id: Number, name: String, title: String, slogan: String, description: String, stars: Number, category: { type: String, index: true }, img_url: String, price: Number }); module.exports = mongoose.model('Item', ItemSchema);
  • 24. 24 Mongoose MongoDB query from our Node.js App // In routes/items.js var mongoose = require( 'mongoose' ); var Item = require(__dirname+'/../models/Item') /* GET all items */ router.get('/', function(req, res, next) { Item.find(function(err, items) { if (err) res.send(err); res.json(items); }); });
  • 25. 25 Mongoose MongoDB query from our Node.js App // In routes/items.js * GET item by id */ router.get('/:id', function(req, res, next) { Item.findById({ "_id" : req.params.id }, function(err, item) { if (err) res.send(err); res.json(item); }); });
  • 26. 26 ● Angular is a Javascript framework ● Client side MVC ● Create single page webapps, define all views and controllers in client side Javascript ● Since Angular is a client side framework, we’ll install via bower ● Bower should be used for client side components (bootstrap, Angular, etc.) ● npm for node.js dependencies (Express, Mongoose, etc.) Integrating Angular Into MongoMart
  • 27. 27 Integrating Angular Into MongoMart bower install bootstrap // used for easy layouts/standard styles bower install angular // the main angular.js file bower install angular-route // needed for routing in angular bower install angular-animate // animate transitions between views bower install jquery // jquery library ls bower_components/ Angular angular-animate angular-route bootstrap jquery
  • 28. 28 Integrating Angular Into MongoMart (index) <!doctype html> <html lang="en" ng-app="mongomartApp"> <head> <meta charset="utf-8"> <title>MongoMart</title> <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css"> <link rel="stylesheet" href="stylesheets/style.css"> <script src="bower_components/angular/angular.js"></script> <script src="bower_components/angular-route/angular-route.js"></script> <script src="bower_components/angular-animate/angular-animate.js"></script> <script src="javascripts/app.js"></script> <script src="javascripts/controllers.js"></script> </head> <body> <div class="view-container"><div ng-view class="view-frame"></div></div> </body> </html>
  • 29. 29 Integrating Angular Into MongoMart (app.js) var mongomartApp = angular.module('mongomartApp', ['ngRoute','mongomartControllers', 'ngAnimate']); mongomartApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/items', { templateUrl: 'partials/item-list.html', controller: 'ItemListCtrl' }). when('/items/:itemId', { templateUrl: 'partials/item-detail.html', controller: 'ItemDetailCtrl' }). otherwise({ redirectTo: '/items' }); }]);
  • 30. 30 Integrating Angular Into MongoMart (app.js)
  • 31. 31 Integrating Angular Into MongoMart (controllers.js) var mongomartControllers = angular.module('mongomartControllers', []); mongomartControllers.controller('ItemListCtrl', ['$scope', '$http', function($scope, $http) { $http.get('http://localhost:3000/items').success(function(data) { $scope.items = data; }); $scope.itemOrder = 'title'; }]); mongomartControllers.controller('ItemDetailCtrl', ['$scope', '$http', '$routeParams', function($scope, $http, $routeParams) { $scope.itemId = $routeParams.itemId; $http.get('http://localhost:3000/items/' + $routeParams.itemId).success(function(data) { $scope.item = data; }); }]);
  • 32. 32 Integrating Angular Into MongoMart (item- detail.html) <div class="row"> <div class="col-md-8"> <img class="img-responsive" src="{{item.img_url}}" alt=""> </div> <div class="col-md-4"> <h3>Product Description</h3> <p> {{item.description}} </p> </div> </div>
  • 33. 33 ● MongoDB as the backing database ● Express for routing in Node.js (e.g. /items) ● Angular for client side MVC, single page webapp ● Node.js as our application server MEAN Stack for MongoMart
  • 34. Our Node.js Application Structure Client side components, such as Javascript libraries and CSS (e.g. Bootstrap). Brief intro to Bower in the Angular section of this presentation. Our models using Mongoose Publicly accessible static files, such as images and CSS. Routes defined by express. Templates populated by routes from above app.js is our application’s starting place, this file is used to load all dependencies and other Node.js files
  • 37. 37 Links • MongoMart Github Location: https://github.com/zuketo/meanstack • MEAN Stack Course on Edx: https://www.edx.org/course/introduction- mongodb-using-mean-stack-mongodbx-m101x
  • 38. #MDBDays mongodb.com Get your technical questions answered In the foyer, 10:00 - 5:00 By appointment only – register in person
  • 39. Tell me how I did today on Guidebook and enter for a chance to win one of these How to do it: Download the Guidebook App Search for MongoDB Silicon Valley Submit session feedback