Your SlideShare is downloading. ×
A practical intro to web development with mongo db and nodejs  when, why and how v2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

A practical intro to web development with mongo db and nodejs when, why and how v2

331

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
331
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. By Jorge GarifunaProfessional Web Developer info@GariDigital.com 213-915-4402 JGari.com/resume Twitter: @jgarifuna
  • 2. SMS your Name and Email to: 213-985-4413SMS 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 SQL3. Uses JSON for interaction 1. JSON = JavaScript Object Notation4. Managed by 10gen company SMS your name & email to: 213-985-4413 JGari.com/resume
  • 4. 1. Scalable2. High performance3. Open source4. Written in C++5. Humongous  SMS your name & email to: 213-985-4413 JGari.com/resume
  • 5. 1. Document-Oriented Storage2. Full Index Support3. Replication & High Availability: Mirror across LAN/WAN4. Auto-Sharding: Scale horizontally5. Map/Reduce: aggregation & data processing6. GridFS: Store files of any size SMS your name & email to: 213-985-4413 JGari.com/resume
  • 6. 1. Not a Relational Database (RDBMS)2. Not ideal for every scenario SMS your name & email to: 213-985-4413 JGari.com/resume
  • 7. 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
  • 8. 1. I dig alpha products2. Beta products are my cut of tea3. I only consider stable productsSMS your name & email to: 213-985-4413 JGari.com/resume
  • 9. Credit: Sanjeev MishraSMS your name & email to: 213-985-4413 JGari.com/resume
  • 10. 1. When you need flexibility in your data2. When you want to easily scale3. When your dataset does not have zillions of joinsSMS your name & email to: 213-985-4413 JGari.com/resume
  • 11. MySQL executable Oracle executable Mongo executablemysqld oracle mongodmysql sqlplus mongoMySQL term Mongo term/conceptdatabase databasetable collectionindex indexrow BSON documentcolumn BSON fieldjoin embedding and linkingprimary key _id fieldgroup 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
  • 12. 1. Download from 1. http://www.mongodb.org/downloads2. Unzip package3. Run the following from terminal 1. sudo mkdir -p /data/db 2. sudo chown `id -u` /data/db4. 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
  • 13. 1. If added to path in command line type 1. mongod2. If not on path 1. Access the bin folder on mongo folder 2. Type: ./mongodSMS your name & email to: 213-985-4413 JGari.com/resume
  • 14. 1. If added to path in command line type 1. mongo2. If not on path 1. Access the bin folder on mongo folder 2. Type: ./mongoSMS your name & email to: 213-985-4413 JGari.com/resume
  • 15. 1. Databases are created automatically2. Tables are created automatically3. Primary key is created automaticallySMS your name & email to: 213-985-4413 JGari.com/resume
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. SMS your name & email to: 213-985-4413 JGari.com/resume
  • 22. Source: http://www.mongodb.org/display/DOCS/Replica+SetsSMS your name & email to: 213-985-4413 JGari.com/resume
  • 23.  On each mongodb instance start service with:  mongod --rest --replSet mysetSource: http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics SMS your name & email to: 213-985-4413 JGari.com/resume
  • 24.  Connect to primary server: mongo --host PRIMARY_IP_OR_NAME  Initialize replica set: rs.initiate()  If you get error: "local.oplog.rs is not empty on the initiating member. cannot initiate.”  Fix by typing (source: http://stackoverflow.com/questions/10953752/how-to-modify-replica-set-config): ▪ use local ▪ db.dropDatabase() ▪ 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
  • 25.  Connect to primary server:  mongo --host PRIMARY_IP_OR_NAME  Add a document  Switch to your desire db: use DB_NAME  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
  • 26. public static function getIpGeoDataFromMongo($ip) { $rv = array(); if (strlen($ip) > 0) { $m = new Mongo(); // connect, MongoClient $db = $m->selectDB("geoip"); $collection_geo_city_blocks = new MongoCollection($db, self::IP_BLOCKS_TABLE_NAME); $ip = addslashes($ip); $ip = ip2long($ip); $query = array($and => array ( array( startIpNum => array($lte => $ip) ), array(endIpNum => array($gte => $ip) ) ) ); $cursor = $collection_geo_city_blocks->find($query); $result = $cursor->getNext(); if (isset($result[locId]) && strlen($result[locId]) > 0) { $collection_geo_city_locations = new MongoCollection($db, self::IP_LOCATIONS_TABLE_NAME); $query = array(locId => $result[locId]); $cursor = $collection_geo_city_locations->find($query); $rv = $cursor->getNext(); } } return $rv; }SMS your name & email to: 213-985-4413 JGari.com/resume
  • 27. Some Basic Node JS stuffSMS 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 folder2. Create testserver.js file and place within folder3. Run node 1. Node testserver.js4. 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 Framework2. 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_NAME2. Change into your new app folder 1. cd ./YOUR_APP_NAME3. 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_NAME2. Run app with node 1. node app3. 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_NAME2. Run app with node 1. node app3. 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-tracker2. 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 ▪ @jgarifunaSMS your name & email to: 213-985-4413 JGari.com/resume
  • 38. 1. http://www.mongodb.org2. http://nodejs.org3. http://expressjs.com4. http://pixelhandler.com/blog/2012/02/09/dev elop-a-restful-api-using-node-js-with- express-and-mongoose5. http://lampsig.org6. http://www.meetup.com/LAMPsig SMS your name & email to: 213-985-4413 JGari.com/resume

×