dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); >...

88

Transcript of dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); >...

Page 1: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags
Page 2: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

dinner in the sky

with

Page 3: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

@marcboeker

Page 4: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags
Page 5: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

boarding

Page 6: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

MongoDB

Page 7: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

MongoDB

freebie

Page 8: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags
Page 9: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Document-orientated Storage

Page 10: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

JSON-Style Documents

Document-orientated Storage

Page 11: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

JSON-Style Documents

Document-orientated Storage

Scales to Hell

Page 12: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

JSON-Style Documents

Sharding/Replica Sets

Document-orientated Storage

Scales to Hell

Page 13: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

JSON-Style Documents

Sharding/Replica Sets

Document-orientated Storage

Scales to Hell

Replication/Failover

Page 14: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

JSON-Style Documents

Sharding/Replica Sets

MongoDB ♥ You

Document-orientated Storage

Scales to Hell

Replication/Failover

Page 15: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

JSON-Style Documents

Sharding/Replica Sets

MongoDB ♥ You

Document-orientated Storage

Scales to Hell

Replication/Failover

Map & Reduce

Page 16: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

welcome passengers

Page 17: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags
Page 18: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ sudo port install mongodb

Page 19: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Installation on *nix

Page 20: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

deb http://downloads.mongodb.org/distros/ubuntu 10.4 10gen

Page 21: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ sudo apt-get install mongodb

Page 22: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Ruby

Page 23: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

♥ Ruby

Page 24: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ sudo gem install mongo

Page 25: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Python

Page 26: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

♥ Python

Page 27: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ sudo easy_install pymongo

Page 28: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Node.js

Page 29: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

♥ Node.js

Page 30: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ sudo npm install mongodb

Page 31: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags
Page 32: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags
Page 33: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Page 34: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ sudo pecl install mongo

$ echo "extension=mongo.so" >> php.ini

Page 35: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

taking off

Page 36: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ mongo

Page 37: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.insert()

Page 38: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.insert({ name: "Angie", buddies: ["Wulfi", "Sarrazi", "Obami"], followers: 14.75, marked_as_spam: true});

Page 39: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.find()

Page 40: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.find({name: "Angie"});{ "_id" : ObjectId("4c9f87f54d17321d092991aa"), "name" : "Angie", "buddies" : ["Wulfi", "Sarrazi","Obami"], "followers" : 14.75, "marked_as_spam" : true}

Page 41: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.find({name: "Angie"});{ "_id" : ObjectId("4c9f87f54d17321d092991aa"), "name" : "Angie", "buddies" : ["Wulfi", "Sarrazi","Obami"], "followers" : 14.75, "marked_as_spam" : true}

magic

Page 42: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.update()

Page 43: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.update( {name: "Angie"}, {"$push": {buddies: "Puti"}});

Page 44: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.update( {name: "Angie"}, {"$push": {buddies: "Puti"}});

db.foo.find({name: "Angie"});{ "_id" : ObjectId("4c9f87f54d17321d092991aa"), "name" : "Angie", "buddies" : ["Wulfi", "Sarrazi","Obami", "Puti"], "followers" : 14.75, "marked_as_spam" : true}

Page 45: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.remove()

Page 46: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.remove({name: "Angie"});

Page 47: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.remove({name: "Angie"});

db.foo.remove({buddies: "Sarrazi"});

Page 48: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.remove({name: "Angie"});

db.foo.remove({buddies: "Sarrazi"});

db.foo.remove();

Page 49: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.remove({name: "Angie"});

db.foo.remove({buddies: "Sarrazi"});

db.foo.remove();

$ sudo rm -Rf /

Page 50: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$query-Imperator

Page 51: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$query-Imperator

O

Page 52: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

{age: {$gt: 10}}{weight: {$gte: 100}}{followers: {$lt: 5}}{shares: {$lte: 40}}{color: {$nin: "red"}}{counter: {$mod: [2, 0]}}{numbers: {$all: [1, 2, 3]}}{sql: {$ne: "nosql"}}{buddies: {$size: 4}}{homies: {$in: "Scooter"}}{brain: {$exists: true}}{name: {$type: 2}}

db.foo.find( )

$query

Page 53: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.find( )

$query

Page 54: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.update($query, $update)

Page 55: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

{$inc: {counter: 1}}

{$set: {name: "monkey"}}

{$unset: {money: 1}}

{$push: {buddies: ["Homer"]}}

{$pushAll: {numbers: [1, 2]}}

{$addToSet: {drinks: "water"}}

{$pop: {queue: 1}}

{$pop: {queue: -1}}

{$pull: {colors: "red"}}

{$pullAll: {chars: ["a", "b"]}}

$update

Page 56: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$update

Page 57: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

dinner in the sky

Page 58: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

replicas

Page 59: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

S1

S2

S3

Set 1

S1

Set 2

S1

S2

Set 3

Master-Server Slave-ServerS1 S2

Page 60: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

sharding

Page 61: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

{ { mongod 3

mongod 2

mongod 1

mongod 3

mongod 2

mongod 1

Shard 3Shard 2

mongod 3

app 1 app 2 app 3

mongos 1 mongos 2 mongos 3

Shard 1

config 1

config 2

config 3

Config Servers

mongod 2

mongod 1

Page 62: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

indexes

Page 63: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.ensureIndex({email: 1});

Page 64: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.ensureIndex({email: 1});

db.foo.ensureIndex({name: -1});

Page 65: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.ensureIndex({email: 1});

db.foo.ensureIndex({name: -1});

db.foo.ensureIndex({email: 1, password: 1});

Page 66: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.ensureIndex({email: 1});

db.foo.ensureIndex({name: -1});

db.foo.ensureIndex({email: 1, password: 1});

db.foo.ensureIndex({location: "2d"});

Page 67: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

db.foo.ensureIndex({email: 1});

db.foo.ensureIndex({name: -1});

db.foo.ensureIndex({email: 1, password: 1});

db.foo.ensureIndex({location: "2d"});

db.foo.ensureIndex({email: 1}, {unique: true});

Page 68: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

gridfs

Page 69: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ mongofiles listconnected to: 127.0.0.1?

Page 70: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ mongofiles put foo.jpgconnected to: 127.0.0.1done!

"

Page 71: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ mongofiles listconnected to: 127.0.0.1foo.jpg12000964?

Page 72: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ mongofiles get foo.jpgconnected to: 127.0.0.1done write to: foo.jpg

"

Page 73: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

map & reduce

Page 74: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ ./mongo

> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );

> db.things.insert( { _id : 2, tags : ['cat'] } );

> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );

> db.things.insert( { _id : 4, tags : [] } );

http://www.flickr.com/photos/lovely-yukari/4388391318/

Page 75: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

$ ./mongo

> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );

> db.things.insert( { _id : 2, tags : ['cat'] } );

> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );

> db.things.insert( { _id : 4, tags : [] } );

lalala datahttp://www.flickr.com/photos/lovely-yukari/4388391318/

Page 76: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> m = function(){

... this.tags.forEach(

... function(z){

... emit( z , { count : 1 } );

... }

... );

...};

Page 77: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> m = function(){

... this.tags.forEach(

... function(z){

... emit( z , { count : 1 } );

... }

... );

...};

map function

Page 78: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> r = function( key , values ){

... var total = 0;

... for ( var i=0; i<values.length; i++ )

... total += values[i].count;

... return { count : total };

...};

Page 79: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> r = function( key , values ){

... var total = 0;

... for ( var i=0; i<values.length; i++ )

... total += values[i].count;

... return { count : total };

...};

reduce function

Page 80: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> res = db.things.mapReduce(m, r);

Page 81: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> res = db.things.mapReduce(m, r);

do it!

Page 82: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> db[res.result].find()

{"_id" : "cat" , "value" : {"count" : 3}}

{"_id" : "dog" , "value" : {"count" : 2}}

{"_id" : "mouse" , "value" : {"count" : 1}}

Page 83: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

> db[res.result].find()

{"_id" : "cat" , "value" : {"count" : 3}}

{"_id" : "dog" , "value" : {"count" : 2}}

{"_id" : "mouse" , "value" : {"count" : 1}}

no rabbit :(

Page 84: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

( 25 * ) +*

http://www.flickr.com/photos/frensjan/4011678461/

Page 85: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

( 25 * ) +*

http://www.flickr.com/photos/frensjan/4011678461/

8.000.000 operationsper hour

Page 87: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

especi

ally fo

r Robe

rto

Cens

ored

Page 88: dinner in the sky€¦ · $ ./mongo > db.things.insert( { _id : 1, tags : ['dog', 'cat'] } ); > db.things.insert( { _id : 2, tags : ['cat'] } ); > db.things.insert( { _id : 3, tags

Thank you very much for travelling with me!

especi

ally fo

r Robe

rto

Cens

ored