Slide 1

Slide 1 text

MongoDB scalable, high-performance, open source NoSQL database

Slide 2

Slide 2 text

Document Store Full Index Support Replication High Availability Querying Auto-Sharding Map/Reduce

Slide 3

Slide 3 text

Blog Id Content K Tag Id Text K Comment Id Content Username K

Slide 4

Slide 4 text

Blog Id Content K Tags Text[] Comment Id Content Username K

Slide 5

Slide 5 text

Blog Id Content K Tag[] Text Cmnt[] Content Username

Slide 6

Slide 6 text

Blog Id Content Tags[] K Cmnt[] Content Username

Slide 7

Slide 7 text

{ _id: new ObjectId(), content: ‘lorem ipsum...’, tags: [‘technical’,‘mongo’], comments: [{ _id: new ObjectId(), content: ‘Best post EVAR!’, username: ‘jameshu’ },{ _id: new ObjectId(), content: ‘Worst post EVAR!’, username: ‘anotherp’ }] }

Slide 8

Slide 8 text

SQL Mongo database database table collection row document column field index index primary key _id

Slide 9

Slide 9 text

Working with Collections Inserts, Updates and Deletes

Slide 10

Slide 10 text

> use awesomedb > db.blogs.insert({content: “hello”, tags: [“test”]}) > db.blogs.insert({content: “hi”}) > db.blogs.insert({content: “goodbye”, tags: [“test”]}) -- insert blog INSERT INTO blogs(id, content) VALUES(1, ‘hello’); -- add tag references INSERT INTO tags(id, text) VALUES(1, ‘test’); INSERT INTO blogs_tags(blog_id, tag_id) VALUES(1,1);

Slide 11

Slide 11 text

> use awesomedb > db.blogs.update({_id: new ObjectId(“...”)}, ... {$set: {content: “changed content”}}) > db.blogs.update({tags: “rant”}, ... {$set: {content: “REDACTED”}}, { multi: true }) -- update a single entity UPDATE blogs SET content = ‘changed content’ WHERE id = 1 -- update multi (automatic) UPDATE blogs SET content = ‘REDACTED’ WHERE content LIKE ‘%s**t%’

Slide 12

Slide 12 text

> use awesomedb > db.blogs.remove({_id: new ObjectId(“...”)}) > db.blogs.remove({content: /s**t/}) -- update a single entity DELETE FROM blogs WHERE id = 1 -- delete multi (automatic) DELETE FROM blogs WHERE content LIKE ‘%s**t%’

Slide 13

Slide 13 text

Querying Finding data from collections

Slide 14

Slide 14 text

> use awesomedb > db.blogs.find() > db.blogs.findOne() > db.blogs.find({}, {content: 1}) -- get all blog entries SELECT * FROM blogs -- get first blog entry SELECT * FROM blogs LIMIT 1 -- get the contents column SELECT content FROM blogs

Slide 15

Slide 15 text

> use awesomedb > db.blogs.find({rating: 5}) > db.blogs.find({rating: 5}).sort(author: 1) > db.blogs.find({rating: { $gt: 3}}) -- get all blog entries with a rating of 5 SELECT * FROM blogs WHERE rating = 5 -- get entries with 5 rating orderd by author SELECT * FROM blogs WHERE rating = 5 ORDER BY author -- get all blog entries with a rating of 3 or greater SELECT * FROM blogs WHERE rating > 3

Slide 16

Slide 16 text

$gt $gte $lt $lte $ne $in $nin $mod $all $size $exists $type $not $where $elemMatch $regex $and $or ....

Slide 17

Slide 17 text

Indexes Creating Performant Queries

Slide 18

Slide 18 text

> use awesomedb > db.blogs.ensureIndex({author: 1}) > db.blogs.ensureIndex({title: 1}, {unique: true}) > db.blogs.ensureIndex({slug: 1}, { ... unique: true, sparse: true})

Slide 19

Slide 19 text

Map/Reduce “BigData” Analysis

Slide 20

Slide 20 text

// MAP FUNCTION var m = function(){ if(this.tags){ this.tags.forEach(function(t){ emit(t, 1) }); } } // REDUCE FUNCTION var r = function(key, values){ return values.length; } db.blogs.mapReduce(m, r, {out: {inline : 1}})

Slide 21

Slide 21 text

{ "results" : [ {"_id" : "mongo", "value" : 1}, {"_id" : "technical", "value" : 2} ], "timeMillis" : 0, "counts" : { "input" : 3, "emit" : 3, "reduce" : 1, "output" : 2 }, "ok" : 1, }

Slide 22

Slide 22 text

Replica Sets Failover, Recover and Scalability

Slide 23

Slide 23 text

Slave 1 Slave 2 Master Driver Reads Writes Reads Reads

Slide 24

Slide 24 text

Write Concern None Normal Safe Journal Safe FSync

Slide 25

Slide 25 text

MongoDB scalable, high-performance, open source NoSQL database