This document provides an overview of MongoDB, including that it is a non-SQL database that uses JSON-like documents with dynamic schemas, instead of the table relationships used in relational databases. It notes that MongoDB is scalable, high performance, and open source. Examples of SQL statements and their MongoDB equivalents are also provided.
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
MongoDB and Node.js Overview
1. By
Jorge Garifuna
Professional Web Developer
info@GariDigital.com
213-915-4402
JGari.com/resume
Twitter: @jgarifuna
2. SMS your Name and Email to:
213-985-4413
SMS your name & email to: 213-985-4413 JGari.com/resume
3. 1. A Database that stores data (documents)
2. A NoSQL Database
1. NoSQL = Not only SQL
3. Uses JSON for interaction
1. JSON = JavaScript Object Notation
4. Managed by 10gen company
SMS your name & email to: 213-985-4413 JGari.com/resume
4. 1. Scalable
2. High performance
3. Open source
4. Written in C++
5. Humongous
SMS your name & email to: 213-985-4413 JGari.com/resume
5. 1. Document-Oriented Storage
2. Full Index Support
3. Replication & High Availability: Mirror across
LAN/WAN
4. Auto-Sharding: Scale horizontally
5. Map/Reduce: aggregation & data processing
6. GridFS: Stire files of any size
SMS your name & email to: 213-985-4413 JGari.com/resume
6. 1. A Relational Database
2. Ideal for every scenario
SMS your name & email to: 213-985-4413 JGari.com/resume
7. 1. Not a Relational Database (RDBMS)
2. Not ideal for every scenario
SMS your name & email to: 213-985-4413 JGari.com/resume
8. Relational Database Table/Records MongoDB Collection/Documents
id firstName lastName age id: 1
firstName: Jorge
lastName: Garifuna
1 Jorge Garifuna 85 age: 85
id: 2
2 Jimmy Smith 30 firstName: Jimmy
lastName: Smith
age: 30
id: 3
firstName: Alan
lastName: Jones
age: 25
city: Los Angeles
state: CA
SMS your name & email to: 213-985-4413 JGari.com/resume
9. 1. I dig alpha products
2. Beta products are my cut of tea
3. I only consider stable products
SMS your name & email to: 213-985-4413 JGari.com/resume
11. 1. When you need flexibility in your data
2. When you want to easily scale
3. When your dataset does not have zillions
of joins
SMS your name & email to: 213-985-4413 JGari.com/resume
12. MySQL executable Oracle executable Mongo executable
mysqld oracle mongod
mysql sqlplus mongo
MySQL term Mongo term/concept
database database
table collection
index index
row BSON document
column BSON field
join embedding and linking
primary key _id field
group by aggregation
Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
SMS your name & email to: 213-985-4413 JGari.com/resume
13. 1. Download from
1. http://www.mongodb.org/downloads
2. Unzip package
3. Run the following from terminal
1. sudo mkdir -p /data/db
2. sudo chown `id -u` /data/db
4. Add to path
1. Mac example: export PATH=/Users/jgarifuna/jg/net/Dev/db/mongodb-osx-x86_64-
2.2.1-rc0/bin:$PATH
2. Linux example: PATH=/home/jgarifuna/mongo-linux-2.2.1/bin:$PATH
SMS your name & email to: 213-985-4413 JGari.com/resume
14. 1. If added to path in command line type
1. mongod
2. If not on path
1. Access the bin folder on mongo folder
2. Type: ./mongod
SMS your name & email to: 213-985-4413 JGari.com/resume
15. 1. If added to path in command line type
1. mongo
2. If not on path
1. Access the bin folder on mongo folder
2. Type: ./mongo
SMS your name & email to: 213-985-4413 JGari.com/resume
16. 1. Databases are created automatically
2. Tables are created automatically
3. Primary key is created automatically
SMS your name & email to: 213-985-4413 JGari.com/resume
17. SQL Statement Mongo Statement
INSERT INTO USERS VALUES(3,5) db.users.insert({a:3,b:5})
SELECT * FROM users db.users.find()
UPDATE users SET a=1 WHERE db.users.update({b:'q'}, {$set:{a:1}}, false,
b='q' true)
DELETE FROM users WHERE db.users.remove({z:'abc'});
z="abc"
Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
SMS your name & email to: 213-985-4413 JGari.com/resume
18. SQL Statement Mongo Statement
INSERT INTO USERS VALUES(3,5) db.users.insert({a:3,b:5})
Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
SMS your name & email to: 213-985-4413 JGari.com/resume
19. SQL Statement Mongo Statement
SELECT a,b FROM users db.users.find({}, {a:1,b:1})
SELECT * FROM users db.users.find()
SELECT * FROM users WHERE age=33 db.users.find({age:33})
SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 db.users.find({age:33}).sort({name:1})
ORDER BY name
SELECT * FROM users WHERE age>33 db.users.find({age:{$gt:33}})
SELECT * FROM users WHERE age!=33 db.users.find({age:{$ne:33}})
SELECT * FROM users WHERE age>33 db.users.find({'age':{$gt:33,$lte:40}})
AND age<=40
SELECT * FROM users ORDER BY name db.users.find().sort({name:-1})
DESC
SELECT COUNT(*y) FROM users where db.users.find({age: {'$gt': 30}}).count()
AGE > 30
SELECT COUNT(AGE) from users db.users.find({age: {'$exists':
true}}).count()
Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
SMS your name & email to: 213-985-4413 JGari.com/resume
20. SQL Statement Mongo Statement
UPDATE users SET a=1 WHERE db.users.update({b:'q'}, {$set:{a:1}}, false,
b='q' true)
UPDATE users SET a=a+2 WHERE db.users.update({b:'q'}, {$inc:{a:2}}, false,
b='q' true)
Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
SMS your name & email to: 213-985-4413 JGari.com/resume
21. SQL Statement Mongo Statement
DELETE FROM users WHERE z="abc" db.users.remove({z:'abc'});
Source: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
SMS your name & email to: 213-985-4413 JGari.com/resume
22. SMS your name & email to: 213-985-4413 JGari.com/resume
24. On each mongodb instance start service with:
mongod --rest --replSet myset
Source: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics
SMS your name & email to: 213-985-4413 JGari.com/resume
25. Connect to primary server:
mongo --host PRIMARY_IP_OR_NAME
Initialize replica set
rs.initiate()
Add secondary node to replica set
rs.add(‘FIRST_SERVER_NAME_OR_IP’)
Add arbiter node to replica set
rs.addArb(‘ARB_SERVER_NAME_OR_IP’)
Source: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics
SMS your name & email to: 213-985-4413 JGari.com/resume
26. Connect to primary server:
mongo --host PRIMARY_IP_OR_NAME
Add a document
db.foo.save({name: “Jorge Garifuna”})
Set secondary to slave (otherwise you wont be able to see data)
rs.slaveOk()
Query secondary
db.foo.find()
Source: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics
SMS your name & email to: 213-985-4413 JGari.com/resume
27. Some Node JS stuff
SMS your name & email to: 213-985-4413 JGari.com/resume
28. Platform built on Google Chrome’s JavaScript
Runtime
For building fast, scalable network applications
Substitute for Apache/PHP
But you create your own server code
SMS your name & email to: 213-985-4413 JGari.com/resume
29. Download from
nodejs.org
Run installation
SMS your name & email to: 213-985-4413 JGari.com/resume
30. var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
1. Create new folder
2. Create testserver.js file and place within folder
3. Run node
1. Node testserver.js
4. On browser go to: http://127.0.0.1:1337
SMS your name & email to: 213-985-4413 JGari.com/resume
31. 1. A Node JS Application Framework
2. Uses MVC (model, view, controller) pattern
SMS your name & email to: 213-985-4413 JGari.com/resume
32. 1. From the command line run Node Package
Manager
1. sudo npm install -g express
SMS your name & email to: 213-985-4413 JGari.com/resume
33. 1. From the command line run
1. Express ./YOUR_APP_NAME
2. Change into your new app folder
1. cd ./YOUR_APP_NAME
3. Install depedencies
1. npm install -d
SMS your name & email to: 213-985-4413 JGari.com/resume
34. 1. Change into your new app folder
1. cd ./YOUR_APP_NAME
2. Run app with node
1. node app
3. On browser go to URL:
1. http://localhost:3000
SMS your name & email to: 213-985-4413 JGari.com/resume
35. 1. Change into your new app folder
1. cd ./YOUR_APP_NAME
2. Run app with node
1. node app
3. On browser go to URL:
1. http://localhost:3000
SMS your name & email to: 213-985-4413 JGari.com/resume
36. 1. Download workout web api from
1. https://github.com/donnfelker/workout-tracker
2. Checkout Develop a RESTful API Using Node.js
With Express and Mongoose
1. http://pixelhandler.com/blog/2012/02/09/develop-a-
restful-api-using-node-js-with-express-and-
mongoose/
SMS your name & email to: 213-985-4413 JGari.com/resume
37. While you think…
Sign up to LAMPsig’s mailing list at:
▪ http://lampsig.org
Join LAMPsig on Meetup at:
▪ http://www.meetup.com/LAMPsig
Jorge Garifuna
▪ info@GariDigital.com
▪ @jgarifuna
SMS your name & email to: 213-985-4413 JGari.com/resume
38. 1. http://www.mongodb.org
2. http://nodejs.org
3. http://expressjs.com
4. http://pixelhandler.com/blog/2012/02/09/dev
elop-a-restful-api-using-node-js-with-
express-and-mongoose
5. http://lampsig.org
6. http://www.meetup.com/LAMPsig
SMS your name & email to: 213-985-4413 JGari.com/resume