0
Getting Started With                           MongoDB                           { author: “Ynon Perek” }Thursday, January...
Whoami                     Ynon Perek                     http://ynonperek.com                     ynon@ynonperek.comThurs...
Agenda                                MongoDB Overview                                Mongo Test Drive                    ...
MongoDB Overview                  Data Store for                  JSON ObjectsThursday, January 31, 13
MongoDB Overview                  Data Store for                  JSON Objects          {               “Name” : “Rose Tyl...
JSON Objects                     A JSON Object is a collection of key/value pairs                     Keys are simple stri...
JSON Examples                     {                           “name”: “The Doctor”,                           “age”: 900  ...
MongoDB Overview                     A Document Oriented Database (No SQL)Thursday, January 31, 13
Keeping It SimpleThursday, January 31, 13
Keeping It Simple                     No Transactions                     No JoinsThursday, January 31, 13
Application Architecture                            SERVER          DBThursday, January 31, 13
Application Architecture                                                  DB                            SERVER          DB...
What Can Mongo Do For You                     Create and store objects                     Arrange them in collections    ...
Q&AThursday, January 31, 13
Mongo Test Drive                           Create MongoLab Account And Start Using The DBThursday, January 31, 13
Install mongo Client                     Download mongo from:                     http://www.mongodb.org/downloads        ...
Install mongo Client                     Choose production release for your architectureThursday, January 31, 13
Install mongo Client                     Note: Still using Windows XP ? You’ll have to use the                     previou...
Meet MongoLabThursday, January 31, 13
Database DashboardThursday, January 31, 13
Create New Database                     Choose database name                     Choose provider                     Choos...
Database DashboardThursday, January 31, 13
Connecting To The DB                     There are two options to work with your new DB                           You can ...
Demo: Creating Documents                     Create a few                     documents on the web                     con...
Mongo Data Model                     Let’s model A blog post                     in a blog app                     What’s ...
Cool MongoDB Design             {                  “title”: “Mongo 101”,                  “author” : “ynonp”,             ...
Q&AThursday, January 31, 13
Lab                     Create a DB for musical info                     Create a collection called albums                ...
CRUD Operations                           Create, Read, Update and Destroy DataThursday, January 31, 13
Mongo CRUD                     Create   is called insert                     Read     is called find                     U...
Mongo CRUD                     From a developer’s perspective, MongoDB operations are                     the same through...
Inserting Data                     Use the command insert or save to insert a new object                     db.collection...
Inserting Data                     Inserting to a new collection creates the collection                     Inserting an o...
Reading Data                     find and findOne perform read operations                     Both take a query           ...
Query Document                     An empty (or missing) query document returns                     everything            ...
Query Document                     Each key/value pair in the query document imposes a                     condition on th...
Query Document                                                        Query Object                     Each key/value pair...
Query Document                     A compound query means a logical AND on the                     conditions.            ...
Quiz: What Is Returned                                           from      alterego   publisher                           ...
Quiz: What Is Returned                                           from      alterego   publisher                     {     ...
More Queries                     You can use “$or” to have an OR expression                     {                         ...
Sub Documents                     If your document has sub-documents, it’s possible to                     query by a full...
Sub Documents                     A partial query matches all objects that have at least the                     required ...
Arrays                     You can use an exact array match by providing the full                     array in the query  ...
Arrays                     You can query for an array that has at least one element                     matching the query...
Arrays                     If you have a subdocument as the element of an array,                     it’s possible to quer...
Query Operators                     Complex queries are performed with special operators.                     These are re...
Comparator Queries                     Value for key a is greater than 10                     { “a” : { “$gt” : 10 }}     ...
Queries: $in, $nin                     Use $in to specify a choice from multiple options                     Value for gra...
Quiz: What Is Selected                     { “reads” : { “$gt” : 10 },                       “author” : { “$nin” : [“admin...
Queries: $all                     Select objects with array containing all elements                     Example:          ...
More Query Operators                     “$size” - array has a specific number of elements                     “$exists” -...
Aggregation                     count()    - returns how many objects found                     distinct() - returns all d...
Resources                     Queries Cheat Sheet                     http://www.10gen.com/sites/default/files/downloads/ ...
Q&AThursday, January 31, 13
Lab                     Using the previously defined musical DB. Query for:                     Albums released after/befo...
Update                     Update operations modify existing data in the DB                     Mongo supports two update ...
Update                     The general form for update is:                     db.collection.update(                      ...
Update                     The second argument to update() is an operator object                     It tells update what ...
Update: set                     $set modifies a value or add a new value                     Example:                     ...
Quiz: $set                     What happens here ?                     db.cats.update(                        { color: “wh...
Quiz: $set                     Update owners array of the first cat with white color                     If you want to up...
Update: inc                     $inc increases a numeric value                     Example:                     { “$inc” :...
Quiz: $inc                     What happens here ?                     db.songs.update(                        { “title” :...
Update: push and pushAll                     push() and pushAll() add items to an existing array                     If th...
Update: addToSet                     The $addToSet adds a new item only if it wasn’t already                     in the ar...
Update: pop                     pop removes items of an array                     Use a value of 1 to remove the last elem...
Update: pull                     Remove a specific item from an array.                     Can use $pullAll to remove all ...
Updating with save()                     The second update operation is save()                     takes a document:      ...
Deleting Data                     remove() deletes objects from a collection                     Takes a query and possibl...
Q&AThursday, January 31, 13
Lab                     From the previous music database:                           Add a new album with 4 tracks         ...
Mongoose                           MongoDB + Node.JSThursday, January 31, 13
What’s That                     An Object Relational Mapper for Node.JS                     Handles gory details so you do...
Agenda                     Hello Mongoose                     Schema and Data Types                     Custom Validators ...
Online Resources                     http://mongoosejs.com/                     https://github.com/LearnBoost/mongoose    ...
Hello Mongoose             var mongoose = require(mongoose);             mongoose.connect(localhost, test);             va...
Mongoose Objects                              Schema            Schema                      Model            Model   Model...
Mongoose Objects          var mongoose = require(mongoose);          mongoose.connect(localhost, test);   { name: String} ...
Schema Definitions                                                new Schema({                                            ...
Schema Types                     String                     Number                     Date                     Buffer    ...
Nested Objects                                                var PersonSchema = new Schema({                     Creating...
Array Fields                                                var PersonSchema = new Schema({                     Array fiel...
Schema Use Case                     Let’s start writing a                     photo taking app        var PhotoSchema = ne...
Creating New Objects                     Create a new object                     by instantiating the   var mypic = new Ph...
Creating New Objects                     After the object is                     ready, simply save it                    ...
What Schema Can Do For You                     Add validations on   var PhotoSchema = new Schema({                     the...
What Schema Can Do For You                     Provide default     var PhotoSchema = new Schema({                     valu...
What Schema Can Do For You                     Add methods to your documents             var EvilZombieSchema = new Schema...
Custom Validators                     It’s possible to use your own validation code             var toySchema = new Schema...
Schema Create Indices                     A schema can have some fields marked as “index”. The                     collect...
Schemas Create Accessors                     A virtual field is not saved in the DB, but calculated from                  ...
Q&AThursday, January 31, 13
Querying Data                     Use Model#find / Model#findOne to query data          // executes immediately, passing r...
Querying Data                     You can also chain queries by not passing a callback                     Pass the callba...
Other Query Methods                     find( cond, [fields], [options], [cb] )                     findOne ( cond, [field...
Counting Matches                     Use count to discover how many matching documents                     are in the DB  ...
Lab                     Create a Schema called “Album”                     Add fields: artist, year, tracks               ...
Lab                     Create 5 albums from years 2008, 2009, 2010, 2011,                     2012                     Qu...
Populating Collections                     Mongo has no joins                     Let’s Fake ThemThursday, January 31, 13
Start With Relationships                     Execute the following to create an initial relationship                     h...
Use Query#populate                     query#populate sends another query for the related                     object      ...
Use Query#populate                     Full method signature:                     Query#populate( path, [fields], [model],...
Mongoose Plugins                     A plugin connects to                     the Schema and                     extends i...
Mongoose Plugins                     A mongoose plugin is a simple function which takes                     schema and opt...
Mongoose Plugins                     find or create plugin:                     https://github.com/drudge/mongoose-findorc...
Mongoose Plugins                     Hashed password field plugin:                     https://gist.github.com/4658951Thur...
Mongoose Plugins                     Mongoose troops is a collection of useful mongoose                     plugins:      ...
Thank You                     Photos from: http://123rf.com                     Slides available at: http://ynonperek.comT...
Upcoming SlideShare
Loading in...5
×

Getting Started With MongoDB and Mongoose

14,262

Published on

MongoDB and Mongoose Introduction

Published in: Technology

Transcript of "Getting Started With MongoDB and Mongoose"

  1. 1. Getting Started With MongoDB { author: “Ynon Perek” }Thursday, January 31, 13
  2. 2. Whoami Ynon Perek http://ynonperek.com ynon@ynonperek.comThursday, January 31, 13
  3. 3. Agenda MongoDB Overview Mongo Test Drive Mongo Data Model CRUD Operations Working With FilesThursday, January 31, 13
  4. 4. MongoDB Overview Data Store for JSON ObjectsThursday, January 31, 13
  5. 5. MongoDB Overview Data Store for JSON Objects { “Name” : “Rose Tyler” }Thursday, January 31, 13
  6. 6. JSON Objects A JSON Object is a collection of key/value pairs Keys are simple strings Values can be: Numbers, Strings, Arrays, Other Objects, and moreThursday, January 31, 13
  7. 7. JSON Examples { “name”: “The Doctor”, “age”: 900 } { “race”: “human”, “body parts” : [“head”, “legs”, “arms”, “eyes”] }Thursday, January 31, 13
  8. 8. MongoDB Overview A Document Oriented Database (No SQL)Thursday, January 31, 13
  9. 9. Keeping It SimpleThursday, January 31, 13
  10. 10. Keeping It Simple No Transactions No JoinsThursday, January 31, 13
  11. 11. Application Architecture SERVER DBThursday, January 31, 13
  12. 12. Application Architecture DB SERVER DB DBThursday, January 31, 13
  13. 13. What Can Mongo Do For You Create and store objects Arrange them in collections Retrieve them laterThursday, January 31, 13
  14. 14. Q&AThursday, January 31, 13
  15. 15. Mongo Test Drive Create MongoLab Account And Start Using The DBThursday, January 31, 13
  16. 16. Install mongo Client Download mongo from: http://www.mongodb.org/downloads Extract zip file Run mongoThursday, January 31, 13
  17. 17. Install mongo Client Choose production release for your architectureThursday, January 31, 13
  18. 18. Install mongo Client Note: Still using Windows XP ? You’ll have to use the previous 2.0 versionThursday, January 31, 13
  19. 19. Meet MongoLabThursday, January 31, 13
  20. 20. Database DashboardThursday, January 31, 13
  21. 21. Create New Database Choose database name Choose provider Choose plan (free is good) Create a DB userThursday, January 31, 13
  22. 22. Database DashboardThursday, January 31, 13
  23. 23. Connecting To The DB There are two options to work with your new DB You can use the web console You can use the command line console Let’s start with the web.Thursday, January 31, 13
  24. 24. Demo: Creating Documents Create a few documents on the web console Update the data Delete some of them Search by fieldsThursday, January 31, 13
  25. 25. Mongo Data Model Let’s model A blog post in a blog app What’s The Data ? How Should You Save It ?Thursday, January 31, 13
  26. 26. Cool MongoDB Design { “title”: “Mongo 101”, “author” : “ynonp”, “comments” : [ { “author” : “...”, “content” : “...” }, { “author” : “...”, “content” : “...” } ], “tags” : [ “funny”, “informative”], “content” : “...” }Thursday, January 31, 13
  27. 27. Q&AThursday, January 31, 13
  28. 28. Lab Create a DB for musical info Create a collection called albums Add info for 3 albums you like, including: Album Name, Artist, Tracks, Release Date, Genres Tracks is an array of objects Genres is an array of stringsThursday, January 31, 13
  29. 29. CRUD Operations Create, Read, Update and Destroy DataThursday, January 31, 13
  30. 30. Mongo CRUD Create is called insert Read is called find Update is called update Destroy is called removeThursday, January 31, 13
  31. 31. Mongo CRUD From a developer’s perspective, MongoDB operations are the same through the driver and through the console In both cases, operations look like function calls or method invocations We’ll use mongo shell for the rest of this chapterThursday, January 31, 13
  32. 32. Inserting Data Use the command insert or save to insert a new object db.collection.insert( obj ); db.collection.insert( array );Thursday, January 31, 13
  33. 33. Inserting Data Inserting to a new collection creates the collection Inserting an object with an _id key, it is used as the object’s id (and must be unique).Thursday, January 31, 13
  34. 34. Reading Data find and findOne perform read operations Both take a query find returns a cursor findOne returns an object Optional: Fields to fetch db.collection.find( <query>, <projection> )Thursday, January 31, 13
  35. 35. Query Document An empty (or missing) query document returns everything db.collection.find({}) db.collection.find()Thursday, January 31, 13
  36. 36. Query Document Each key/value pair in the query document imposes a condition on the results (objects that match). db.movies.find({ “genre” : “indie” }); db.books.find({“pages” : { “$gt” : 100 }});Thursday, January 31, 13
  37. 37. Query Document Query Object Each key/value pair in the query document imposes a condition on the results (objects that match). db.movies.find({ “genre” : “indie” }); db.books.find({“pages” : { “$gt” : 100 }});Thursday, January 31, 13
  38. 38. Query Document A compound query means a logical AND on the conditions. db.inventory.find( { “type” : “snacks”, “available” : { “$lt” : 10 } });Thursday, January 31, 13
  39. 39. Quiz: What Is Returned from alterego publisher Bruce { Earth DC Wayne “publisher” : “DC” } Peter Earth Marvel Parker Krypton Clark Kent DCThursday, January 31, 13
  40. 40. Quiz: What Is Returned from alterego publisher { Bruce “publisher” : Earth DC Wayne “DC”, “from” : “Earth” Peter Earth Marvel } Parker Krypton Clark Kent DCThursday, January 31, 13
  41. 41. More Queries You can use “$or” to have an OR expression { “$or” : [ { “type” : “food” }, { “type” : “drinks” } ] }Thursday, January 31, 13
  42. 42. Sub Documents If your document has sub-documents, it’s possible to query by a full sub document or look for a partial match Full sub-document query means subdocument is exactly as specified in the query Example: { ISBN : { “ISBN-10” : “1906465592”, “ISBN-13” : “978-1906465599” }}Thursday, January 31, 13
  43. 43. Sub Documents A partial query matches all objects that have at least the required field (but may contain more) Example: { “language.primary” : “english” } Value of language is an object, and it has a field called primaryThursday, January 31, 13
  44. 44. Arrays You can use an exact array match by providing the full array in the query Example: { tags : [ “funny”, “cute”, “cats” ] }Thursday, January 31, 13
  45. 45. Arrays You can query for an array that has at least one element matching the query Example: { “tags” : “funny” }Thursday, January 31, 13
  46. 46. Arrays If you have a subdocument as the element of an array, it’s possible to query by its fields using the dot notation. Examples: { “tracks.4.name” : “Rose Mary Stretch” } { “tracks.name” : “Rose Mary Stretch” }Thursday, January 31, 13
  47. 47. Query Operators Complex queries are performed with special operators. These are reserved words starting with a $ Some of them: $gt, $gte, $lt, $lte, $ne, $in, $nin, $all, $or, $notThursday, January 31, 13
  48. 48. Comparator Queries Value for key a is greater than 10 { “a” : { “$gt” : 10 }} Value for key b is not 7 { “b” : { “$ne” : 7 }} Value for key name is greater (dictionary sort) than ‘bird’ { “name” : { “$gt” : “bird” }}Thursday, January 31, 13
  49. 49. Queries: $in, $nin Use $in to specify a choice from multiple options Value for grade is 85, 90 or 100 { “grade” : { “$in” : [ 85, 90, 100 ] } } Value for fruit is neither apple nor banana { “fruit” : { “$nin” : [“apple”, “banana” ] } }Thursday, January 31, 13
  50. 50. Quiz: What Is Selected { “reads” : { “$gt” : 10 }, “author” : { “$nin” : [“admin”, “manager”, “boss” ] } } author reads title How To Use admin 99 Mongo How To Make Joe 120 Money Windows Jim 8 ManualThursday, January 31, 13
  51. 51. Queries: $all Select objects with array containing all elements Example: { “tags” : { “$all” : [ “funny”, “cats” ] } }Thursday, January 31, 13
  52. 52. More Query Operators “$size” - array has a specific number of elements “$exists” - field present or missing Example: { “friends” : { “$size” : 7 } } { “producer” : { “$exists” : false } }Thursday, January 31, 13
  53. 53. Aggregation count() - returns how many objects found distinct() - returns all distinct values for a key Example: db.posts.distinct( “tags” )Thursday, January 31, 13
  54. 54. Resources Queries Cheat Sheet http://www.10gen.com/sites/default/files/downloads/ mongodb_qrc_queries.pdfThursday, January 31, 13
  55. 55. Q&AThursday, January 31, 13
  56. 56. Lab Using the previously defined musical DB. Query for: Albums released after/before 2008 Albums with 7 tracks Albums by a specific genre Albums by a specific track name Display ALL different genres in the DBThursday, January 31, 13
  57. 57. Update Update operations modify existing data in the DB Mongo supports two update commands: update() and save() Update is the more general (and complex)Thursday, January 31, 13
  58. 58. Update The general form for update is: db.collection.update( <query>, <update>, <options> ) Which Entries What to do with to update themThursday, January 31, 13
  59. 59. Update The second argument to update() is an operator object It tells update what to do with the data Some keys you can use: “$set”, “$inc” “$push”, “$pushAll”, “$addToSet”, “$pop”, “$pull”, “$pullAll”Thursday, January 31, 13
  60. 60. Update: set $set modifies a value or add a new value Example: db.posts.update( { title: “Why Is Your Cat Unhappy” }, { $set : { “archived” : true } } );Thursday, January 31, 13
  61. 61. Quiz: $set What happens here ? db.cats.update( { color: “white” }, { “$set” : { “owners” : [“John”, “Jim”] } } );Thursday, January 31, 13
  62. 62. Quiz: $set Update owners array of the first cat with white color If you want to update all objects, use multi db.cats.update( { color: “white” }, { “$set” : { “owners” : [“John”, “Jim”] } } { multi : true } );Thursday, January 31, 13
  63. 63. Update: inc $inc increases a numeric value Example: { “$inc” : { “age” : 11 } }Thursday, January 31, 13
  64. 64. Quiz: $inc What happens here ? db.songs.update( { “title” : “Killing Lies” }, { “$inc” : { “plays” : 1 } } );Thursday, January 31, 13
  65. 65. Update: push and pushAll push() and pushAll() add items to an existing array If they array did not exists, it is created Example: db.creatures.update( { name: “The Doctor” }, { “$push” : { companions : “Rose Tyler” } } )Thursday, January 31, 13
  66. 66. Update: addToSet The $addToSet adds a new item only if it wasn’t already in the array Example: { “$addToSet” : { “tags” : “funny” } }Thursday, January 31, 13
  67. 67. Update: pop pop removes items of an array Use a value of 1 to remove the last element Use a value of -1 to remove the first element Example: { “$pop” : { “companions” : 1 } }Thursday, January 31, 13
  68. 68. Update: pull Remove a specific item from an array. Can use $pullAll to remove all matching elements Example: { “$pull” : { “companions” : “Rose Tyler” } }Thursday, January 31, 13
  69. 69. Updating with save() The second update operation is save() takes a document: If the document has an id - update it If not, insert it to the DBThursday, January 31, 13
  70. 70. Deleting Data remove() deletes objects from a collection Takes a query and possibly a <justOne> arguments Examples: db.posts.remove({ “author” : “Father Angelo” }) db.music.remove({ “genres” : “pop” }) db.posts.remove({ “tags” : “funny” }, 1 );Thursday, January 31, 13
  71. 71. Q&AThursday, January 31, 13
  72. 72. Lab From the previous music database: Add a new album with 4 tracks Add a new track to that new album Set property “plays” on all albums to 6 Increase it by 4 only for “indie” albums Delete all “indie” musicThursday, January 31, 13
  73. 73. Mongoose MongoDB + Node.JSThursday, January 31, 13
  74. 74. What’s That An Object Relational Mapper for Node.JS Handles gory details so you don’t have to Fat ModelsThursday, January 31, 13
  75. 75. Agenda Hello Mongoose Schema and Data Types Custom Validators Querying Data Poor Man’s Joins (Populate) Mongoose PluginsThursday, January 31, 13
  76. 76. Online Resources http://mongoosejs.com/ https://github.com/LearnBoost/mongoose http://www.youtube.com/watch?v=4fQsDiioj3I irc: #mongoosejs on freenodeThursday, January 31, 13
  77. 77. Hello Mongoose var mongoose = require(mongoose); mongoose.connect(localhost, test); var schema = mongoose.Schema({ name: string }); var Cat = mongoose.model(Cat, schema); var kitty = new Cat({ name: Zildjian }); kitty.save(function (err) { if (err) // ... console.log(meow); });Thursday, January 31, 13
  78. 78. Mongoose Objects Schema Schema Model Model ModelThursday, January 31, 13
  79. 79. Mongoose Objects var mongoose = require(mongoose); mongoose.connect(localhost, test); { name: String} var schema = mongoose.Schema( { name: string }); Cat var Cat = mongoose.model( Cat, schema); var kitty = new Cat( kitty { name: Zildjian });Thursday, January 31, 13
  80. 80. Schema Definitions new Schema({ title: String, A schema takes a body: String, description object date: Date, which specifies its keys hidden: Boolean, and their types meta: { votes: Number, Types are mostly favs: Number normal JS } });Thursday, January 31, 13
  81. 81. Schema Types String Number Date Buffer Boolean Mixed ObjectId ArrayThursday, January 31, 13
  82. 82. Nested Objects var PersonSchema = new Schema({ Creating nested objects   name: {     first: String, is easy     last: String   } Just assign an object as }); the valueThursday, January 31, 13
  83. 83. Array Fields var PersonSchema = new Schema({ Array fields are easy   name: {     first: String,     last: String Just write the type as a   }, single array element   hobbies: [String] });Thursday, January 31, 13
  84. 84. Schema Use Case Let’s start writing a photo taking app var PhotoSchema = new Schema({   username: String, Each photo is saved   photo: String, in the DB as a Data   uploaded_at: Date URL });   var Photo = mongoose.model( Along with the Photo, PhotoSchema); photo we’ll save the usernameThursday, January 31, 13
  85. 85. Creating New Objects Create a new object by instantiating the var mypic = new Photo({   username: ynon, model   photo: foo,   uploaded_at: new Date() Pass the values to }); the ctorThursday, January 31, 13
  86. 86. Creating New Objects After the object is ready, simply save it mypic.save();Thursday, January 31, 13
  87. 87. What Schema Can Do For You Add validations on var PhotoSchema = new Schema({ the fields   username: { type: String, required: true }, Stock validators:   photo: { type: String, required: true }, required, min, max   uploaded_at: Date Can also create }); custom validators Validation happens on saveThursday, January 31, 13
  88. 88. What Schema Can Do For You Provide default var PhotoSchema = new Schema({ values for fields   username: { type: String, required: true }, Can use a   photo: function as { type: String, required: true }, default for   uploaded_at: { type: Date, default: Date.now } delayed }); evaluationThursday, January 31, 13
  89. 89. What Schema Can Do For You Add methods to your documents var EvilZombieSchema = new Schema({   name: String,   brainz: { type: Number, default: 0 } });   EvilZombieSchema.methods.eat_brain = function() {   this.brainz += 1; };  Thursday, January 31, 13
  90. 90. Custom Validators It’s possible to use your own validation code var toySchema = new Schema({   color: String,   name: String });   toySchema.path(color).validate(function(value) {   return ( this.color.length % 3 === 0 ); });  Thursday, January 31, 13
  91. 91. Schema Create Indices A schema can have some fields marked as “index”. The collection will be indexed by them automatically var PhotoSchema = new Schema({   username: { type: String, required: true, index: true },   photo: { type: String, required: true },   uploaded_at: { type: Date, default: Date.now } });Thursday, January 31, 13
  92. 92. Schemas Create Accessors A virtual field is not saved in the DB, but calculated from existing fields. “full-name” is an example. personSchema.virtual(name.full).get(function () { return this.name.first + + this.name.last; }); personSchema.virtual(name.full).set(function (name) { var split = name.split( ); this.name.first = split[0]; this.name.last = split[1]; });Thursday, January 31, 13
  93. 93. Q&AThursday, January 31, 13
  94. 94. Querying Data Use Model#find / Model#findOne to query data // executes immediately, passing results to callback MyModel.find({ name: john, age: { $gte: 18 }}, function (err, docs) { // do something with data // or handle err });Thursday, January 31, 13
  95. 95. Querying Data You can also chain queries by not passing a callback Pass the callback at the end using exec var p = Photo.find({username: ynon}).   skip(10).   limit(5).   exec(function(err, docs) {   console.dir( docs ); });Thursday, January 31, 13
  96. 96. Other Query Methods find( cond, [fields], [options], [cb] ) findOne ( cond, [fields], [options], [cb] ) findById ( id, [fields], [options], [cb] ) findOneAndUpdate( cond, [update], [options], [cb] ) findOneAndRemove( cond, [options], [cb] )Thursday, January 31, 13
  97. 97. Counting Matches Use count to discover how many matching documents are in the DB Adventure.count({ type: jungle }, function (err, count) { if (err) .. console.log(there are %d jungle adventures, count); });Thursday, January 31, 13
  98. 98. Lab Create a Schema called “Album” Add fields: artist, year, tracks Create a model and a document Add validator for year Save it in the DBThursday, January 31, 13
  99. 99. Lab Create 5 albums from years 2008, 2009, 2010, 2011, 2012 Query the 3 newest albums Print the artist name and the number of tracks Print the artist who has the most albumsThursday, January 31, 13
  100. 100. Populating Collections Mongo has no joins Let’s Fake ThemThursday, January 31, 13
  101. 101. Start With Relationships Execute the following to create an initial relationship https://gist.github.com/4657446 Watch the data in the DB: Album.artist = ObjectId("5106b6e6fde8310000000001")Thursday, January 31, 13
  102. 102. Use Query#populate query#populate sends another query for the related object Album.findOne().exec(function(err, doc) {   // prints undefined   console.log( doc.artist.name ); });     Album.findOne().populate(artist).exec(function(err, doc) {   // prints Pink Floyd   console.log( doc.artist.name ); });Thursday, January 31, 13
  103. 103. Use Query#populate Full method signature: Query#populate( path, [fields], [model], [cond], [options] ) cond is a query condition object ( i.e. { age: { $gte: 21 }} options is a query options object ( i.e. { limit: 5 } Helps when populating arraysThursday, January 31, 13
  104. 104. Mongoose Plugins A plugin connects to the Schema and extends it in a wayThursday, January 31, 13
  105. 105. Mongoose Plugins A mongoose plugin is a simple function which takes schema and options Demo: lastModifiedPlugin https://gist.github.com/4657579Thursday, January 31, 13
  106. 106. Mongoose Plugins find or create plugin: https://github.com/drudge/mongoose-findorcreateThursday, January 31, 13
  107. 107. Mongoose Plugins Hashed password field plugin: https://gist.github.com/4658951Thursday, January 31, 13
  108. 108. Mongoose Plugins Mongoose troops is a collection of useful mongoose plugins: https://github.com/tblobaum/mongoose-troopThursday, January 31, 13
  109. 109. Thank You Photos from: http://123rf.com Slides available at: http://ynonperek.comThursday, January 31, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×