Building Your First App with MongoDB

  • Published on
    12-May-2015

  • View
    780

  • Download
    1

DESCRIPTION

Tyler Brock's Presentation from An Evening with MongoDB Portland

Transcript

  • 1.Software Engineer, 10genTyler BrockBuilding your first app;an introduction to MongoDB

2. What is MongoDB 3. MongoDB is a ___________database Document Open source High performance Horizontally scalable 4. Document Database Not for .PDF & .DOC files A document is essentially an associativearray Document == JavaScript Object Document == PHP Array Document == Python Dictionary Document == Ruby Hash etc 5. Open Source MongoDB is an open source project On GitHub Licensed under the AGPL Started & sponsored by 10gen Commercial licenses available Contributions welcome 6. High Performance Written in C++ Extensive use of memory-mapped filesi.e. read-through write-through memorycaching. Runs nearly everywhere Data serialized as BSON (fast parsing) Full support for primary & secondary indexes Document model = less work 7. Horizontally Scalable 8. Full Featured Ad Hoc queries Real time aggregation Rich query capabilities Traditionally consistent Geospatial features Support for most programming languages Flexible schema 9. Database Landscape 10. http://www.mongodb.org/downloads 11. Mongo Shell 12. Document Database 13. RDBMS MongoDBTable, View CollectionRow DocumentIndex IndexJoin Embedded DocumentForeign Key ReferencePartition ShardTerminology 14. Typical (relational) ERD 15. MongoDB ERD 16. First step in any applicationisDetermine your entities 17. In a relational based appWe would start by doingschema design 18. Relational schema design Large ERD Diagrams Complex create table statements ORMs to map tables to objects Tables just to join tables together Lots of revisions until we get it just right 19. In a MongoDB based appWe start building our appand let the schema evolve 20. Working with MongoDB 21. http://www.flickr.com/photos/somegeekintn/3484353131/We will build a librarymanagement application 22. MongoDB collections Users Books Authors Publishers 23. user = {username: fred.jones,first_name: fred,last_name: jones,}Start with an object(or array, hash, dict, etc) 24. > db.users.insert(user)Insert the recordNo collection creation needed 25. > db.users.findOne(){"_id" : ObjectId("50804d0bd94ccab2da652599"),"username" : "fred.jones","first_name" : "fred","last_name" : "jones"}Querying for the user 26. _id _id is the primary key in MongoDB Automatically indexed Automatically created as an ObjectId if notprovided Any unique immutable value could be used 27. ObjectId ObjectId is a special 12 byte value Guaranteed to be unique across your cluster ObjectId("50804d0bd94ccab2da652599")|-------------||---------||-----||----------|ts mac pidinc 28. > db.author.insert({first_name: j.r.r.,last_name: tolkien,bio: J.R.R. Tolkien (1892.1973), beloved throughout theworld as the creator of The Hobbit and The Lord of the Rings, wasa professor of Anglo-Saxon at Oxford, a fellow of PembrokeCollege, and a fellow of Merton College until his retirement in1959. His chief interest was the linguistic aspects of the earlyEnglish written tradition, but even as he studied these classics hewas creating a set of his own.})Creating an author 29. > db.author.findOne( { last_name : tolkien } ){"_id" : ObjectId("507ffbb1d94ccab2da652597"),"first_name" : "j.r.r.","last_name" : "tolkien","bio" : "J.R.R. Tolkien (1892.1973), beloved throughout theworld as the creator of The Hobbit and The Lord of the Rings, wasa professor of Anglo-Saxon at Oxford, a fellow of PembrokeCollege, and a fellow of Merton College until his retirement in1959. His chief interest was the linguistic aspects of the earlyEnglish written tradition, but even as he studied these classics hewas creating a set of his own."}Querying for our author 30. > db.books.insert({title: fellowship of the ring, the,author:ObjectId("507ffbb1d94ccab2da652597"),language: english,genre: [fantasy, adventure],publication: {name: george allen &unwin,location: London,date: new Date(21 July 1954),}})Creating a Bookhttp://society6.com/PastaSoup/The-Fellowship-of-the-Ring-ZZc_Print/ 31. > db.books.findOne({language: english}, {genre: 1}){"_id" : ObjectId("50804391d94ccab2da652598"),"genre" : ["fantasy","adventure"]}Multiple values per key 32. > db.books.findOne({genre: fantasy}, {title: 1}){"_id" : ObjectId("50804391d94ccab2da652598"),"title" : "fellowship of the ring, the"}Querying for key withmultiple valuesQuery key with single value ormultiple values the same way. 33. > db.books.findOne({}, {publication: 1}){"_id" : ObjectId("50804ec7d94ccab2da65259a"),"publication" : {"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")}}Nested Values 34. > db.books.findOne({publication.date :{ $lt : new Date(21 June 1960)}}){"_id" : ObjectId("50804391d94ccab2da652598"),"title" : "fellowship of the ring, the","author" : ObjectId("507ffbb1d94ccab2da652597"),"language" : "english","genre" : [ "fantasy", "adventure" ],"publication" : {"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")}}Reach into nested valuesusing dot notation 35. > db.books.update({"_id" :ObjectId("50804391d94ccab2da652598")},{ $set : {isbn: 0547928211,pages: 432}})Update booksTrue agile development .Simply change how you work withthe data and the database follows 36. db.books.findOne(){"_id" : ObjectId("50804ec7d94ccab2da65259a"),"author" : ObjectId("507ffbb1d94ccab2da652597"),"genre" : [ "fantasy", "adventure" ],"isbn" : "0395082544","language" : "english","pages" : 432,"publication" : {"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")},"title" : "fellowship of the ring, the"}The Updated Book record 37. > db.books.ensureIndex({title: 1})> db.books.ensureIndex({genre : 1})> db.books.ensureIndex({publication.date: -1})Creating indexes 38. > db.books.findOne({title : /^fell/}){"_id" : ObjectId("50804ec7d94ccab2da65259a"),"author" : ObjectId("507ffbb1d94ccab2da652597"),"genre" : [ "fantasy", "adventure" ],"isbn" : "0395082544","language" : "english","pages" : 432,"publication" : {"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-21T04:00:00Z")},"title" : "fellowship of the ring, the"}Querying with RegEx 39. > db.books.insert({title: two towers, the,author: ObjectId("507ffbb1d94ccab2da652597"),language: english,isbn : "034523510X",genre: [fantasy, adventure],pages: 447,publication: {name: george allen & unwin,location: London,date: new Date(11 Nov 1954),}})Adding a few more bookshttp://society6.com/PastaSoup/The-Two-Towers-XTr_Print/ 40. > db.books.insert({title: return of the king, the,author: ObjectId("507ffbb1d94ccab2da652597"),language: english,isbn : "0345248295",genre: [fantasy, adventure],pages: 544,publication: {name: george allen & unwin,location: London,date: new Date(20 Oct 1955),}})Adding a few more bookshttp://society6.com/PastaSoup/The-Return-of-the-King-Jsc_Print/ 41. > db.books.find({ author: ObjectId("507ffbb1d94ccab2da652597")}).sort({ publication.date : -1}).limit(1){"_id" : ObjectId("5080d33ed94ccab2da65259d"),"title" : "return of the king, the","author" : ObjectId("507ffbb1d94ccab2da652597"),"language" : "english","isbn" : "0345248295","genre" : [ "fantasy", "adventure" ],"pages" : 544,"publication" : {"name" : "george allen & unwin","location" : "London","date" : ISODate("1955-10-20T04:00:00Z")}}Cursors 42. page_num = 3;results_per_page = 10;cursor = db.books.find().sort({ "publication.date" : -1 }).skip((page_num - 1) * results_per_page).limit(results_per_page);Paging 43. > book = db.books.findOne({"title" : "return of the king, the"})> db.author.findOne({_id: book.author}){"_id" : ObjectId("507ffbb1d94ccab2da652597"),"first_name" : "j.r.r.","last_name" : "tolkien","bio" : "J.R.R. Tolkien (1892.1973), beloved throughout the world asthe creator of The Hobbit and The Lord of the Rings, was a professor ofAnglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of MertonCollege until his retirement in 1959. His chief interest was the linguisticaspects of the early English written tradition, but even as he studied theseclassics he was creating a set of his own."}Finding author by book 44. MongoDB Drivers 45. Real applications are notbuilt in the shell 46. MongoDB has nativebindings for over 12languages 47. MongoDB drivers Official Support for 12 languages Community drivers for tons more Drivers connect to mongo servers Drivers translate BSON into native types mongo shell is not a driver, but works likeone in some ways Installed using typical means (npm, pecl,gem, pip) 48. Next Steps 49. Weve introduced a lot ofconcepts here 50. Schema Design w/ Emily 51. Software Engineer, 10genTyler BrockQuestions? Next: Schema Design w/ Emily