Slide 1

Slide 1 text

MongoDB A NoSQL DB Story

Slide 2

Slide 2 text

@DeLongShot Developer, Elevator Up

Slide 3

Slide 3 text

Why MongoDB? Overview

Slide 4

Slide 4 text

John Nunemaker GitHub, Gauges, Speaker Deck, Harmony App “Whereas SQL is about normalizing the storage of data and then flexibly querying it, NoSQL is about thinking how you will query data and then flexibly storing it.”

Slide 5

Slide 5 text

Fun NoSQL! Schema-less (Can be) Very Fast >> Writes >> Reads Scaling

Slide 6

Slide 6 text

Not So Fun Joins ACID transactions NoSQL

Slide 7

Slide 7 text

What is MongoDB? Overview

Slide 8

Slide 8 text

Document-based BSON { Name: “John Doe”, Age: 35, Twitter: “@johndoe” }

Slide 9

Slide 9 text

Collections Not Tables db.users { Name: “John Doe”, Age: 35, Twitter: “@johndoe” }, { Name: “Jane Doe”, Age: 27, Twitter: “@janedoe” }

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Embedded Documents { Name: “John Doe”, Age: 35, Twitter: “@johndoe”, address: { street: “5555 Lane Rd” city: “Wonderland” zip-code: 55555 } }

Slide 12

Slide 12 text

Mongo Shell $: mongo > use rug > rug.admins.insert({name: “John Doe”}) > rug.admins.find() > {_id: 1231232, name: “John Doe”} > rug.admins.find().count() > 1

Slide 13

Slide 13 text

MongoDB and Ruby Overview

Slide 14

Slide 14 text

Ruby Driver gem install mongo gem install bson

Slide 15

Slide 15 text

ODMs in a ORM World MongoMapper Mongoid Mongomatic MongoODM MongoModel High-level modeling functions > Validations > Associations Gems

Slide 16

Slide 16 text

Mongoid gem ‘mongoid’ Associations embedded_in embeds_many has_many belongs_to Columns field

Slide 17

Slide 17 text

Embedded v. Linking Embedded Use “embeds_in” Included in one query Linking Use “has_many” Reference to parent in foreign key Requires another query

Slide 18

Slide 18 text

When to use? Embedded When children are finite/more certain number Linking Unsure of number of children

Slide 19

Slide 19 text

class Quiz includes Mongoid::Document field :name has_many :results embeds_many :questions end

Slide 20

Slide 20 text

class Question includes Mongoid::Document field :question_number field :copy embedded_in :quiz embeds_many :answers end

Slide 21

Slide 21 text

class Answer includes Mongoid::Document field :copy embedded_in :question end

Slide 22

Slide 22 text

#one query quiz = Quiz.find(1) quiz.questions >> returns questions [] question = questions.first >> returns question answers = question.answers.first >> returns answer

Slide 23

Slide 23 text

More Information Mongodb.org   MongoTips.com        

Slide 24

Slide 24 text

Questions?