SlideShare a Scribd company logo
Webinar: Getting Started
with MongoDB and Ruby
Brandon Black
Software Engineer, MongoDB
@brandonmblack
Webinar: Getting Started with Ruby and MongoDB
Webinar: Getting Started with Ruby and MongoDB
+
“I believe people want to express themselves when they
program. They don't want to fight with the language.
Programming languages must feel natural to
programmers. I tried to make people enjoy programming
and concentrate on the fun and creative part of
programming when they use Ruby.”

— Yukihiro “Matz” Matsumoto, Creator of Ruby (2001)
What is MongoDB?
MongoDB is a ___________ database
•
•
•
•
•

Document
Open source
High performance
Horizontally scalable
Full featured
Document Database
•
•
•
•
•
•

Not for .PDF & .DOC files
A document is essentially an associative array
Document = JSON object
Document = PHP Array
Document = Python Dict
Document = Ruby Hash
Open-Source
•
•
•
•
•
•

MongoDB is an open source project
Available on GitHub
Licensed under the AGPL
Started & sponsored by MongoDB, Inc. (10gen)
Commercial licenses available
Contributions welcome
High Performance
• Written in C++
• Extensive use of memory-mapped files 

i.e. read-through write-through memory caching.
• Runs nearly everywhere
• Data serialized as BSON (fast parsing)
• Full support for primary & secondary indexes
• Document model = less work
Shard 1

Shard 2

Shard 3

Horizontally Scalable

Shard N
Scalability & Performance

Data Landscape
Memcached
MongoDB

RDBMS

Depth of Functionality
Full Featured
•
•
•
•
•
•
•

Ad Hoc queries
Real time aggregation
Rich query capabilities
Strongly consistent
Geospatial features
Native support for most programming languages
Flexible schema (not schema-less!)
Installation & Setup
1 Download
From website:
http://www.mongodb.org/downloads
Package manager:
sudo apt-get install mongodb-10gen
brew install mongodb

2 Startup MongoDB
mongod —dbpath /path/to/data

3 Connect with the mongo Shell
Or in our case… IRB/Pry!
Using MongoDB with
Ruby
Using the Ruby Driver
Client Application
Driver

Re
a

ad
Re

d

Write

Secondary

Primary

Secondary
Using the Ruby Driver
# install gem and native extensions (optional)!
gem install mongo
gem install bson_ext

require 'mongo'!
include Mongo!

!
# connecting to the database!
client = MongoClient.new # defaults to localhost:27017!
client = MongoClient.new('host1.example.com')!
client = MongoClient.new('host1.example.com', 27017)!
# using configuration options!
opts
= { :pool_size => 5, :pool_timeout => 5 }!
client = MongoClient.new('host1.example.com', 27017, opts)!
Using the Ruby Driver
seeds = ['h1.example.com:27017',!
'h2.example.com:27017',!
'h3.example.com:27017']!

!
# connecting to a replica set!
client = MongoReplicaSetClient.new(seeds)!
client = MongoReplicaSetClient.new(seeds, :read => :secondary)!
# connecting to a sharded cluster!
client = MongoShardedClient.new(seeds)!
client = MongoShardedClient.new(seeds, :read => :secondary)!
# using a connection string!
ENV['MONGODB_URI'] = 'mongodb://host1:27017?ssl=true'!
client = MongoClient.new!
Using the Ruby Driver
# using a database!
db = client.db('blog')!
db = client['blog']!

!
client.drop_database('blog')!
client.database_names!

!
# using a collection!
coll = db['posts']!

!
coll.drop!
db.collection_names!
Terminology
RDBMS

MongoDB

Table, View

Collection

Row

Document

Index

Index

Join

Embedded Document

Foreign Key

Reference

Partition

Shard
Building a Blog
Models/Entities:
•

Users (Authors)

•

Articles

•

Comments

•

Tags/Categories
In a relational application
we would start by defining
our schema.
Typical Relational Diagram
Category
·Name
·URL

User
·Name
·Email address

Article
·Name
·Slug
·Publish date
·Text

Comment
·Comment
·Date
·Author

Tag
·Name
·URL
In MongoDB we start building
and we let the schema evolve
as we go.
Like Ruby, it has a natural and
enjoyable feeling to it!
MongoDB Diagram
Article

User
·Name
·Email address

·Name
·Slug
·Publish date
·Text
·Author

Comment[]
·Comment
·Date
·Author

Tag[]
·Value

Category[]
·Value
Inserting a New Document
# example document!
author = {!
:username => 'brandonblack',!
:first
=> 'brandon',!
:last
=> 'black'!
}!

!
# inserting into my blog database!
client['blog']['users'].insert(author)

No database or collection
creation required!
Inserting a New Document
# example document!
article = {!
:title
=> 'Hello World'!
:username => 'brandonblack',!
:tags
=> ['ruby', 'getting started'],!
:comments => [ # embedded docs ]!
}!

!
!
# inserting into my blog database!
client['blog']['articles'].insert(article)

No database or collection
creation required!
Finding Documents
coll = client['blog']['users']!

!
# finding a single document!
coll.find_one!
coll.find_one({ :username => 'brandonblack' })!
coll.find_one({ :username => 'brandonblack' }, { :first => 1})!

!
coll = client['blog']['articles']!

!
# finding multiple documents (using cursors)!
cursor = coll.find({ :username => 'brandonblack' }, :limit => 10)!
cursor.each do |article|!
puts article['title']!
end!
Updating and Deleting Documents
# updating a document!
article = { :title => 'Hello Ruby' }!
coll.update({ '_id' => article_id }, article)!
coll.update({ '_id' => article_id },!
{'$set' => {:title => 'Hello Ruby'}})!

!
# deleting a single document!
coll.remove({ '_id' => article_id })!

!
# delete multiple documents!
coll.remove({ 'username' => 'brandonblack' })!

!
# delete all documents in a collection!
coll.remove!
Indexes
# running explain on a query!
coll.find({ :username => 'brandonblack' }).explain!

!

# showing collection indexes!
coll.index_information!

!

# adding an index!
coll.ensure_index({ :username => 1 })!
coll.ensure_index({ :username => Mongo::ASCENDING })!

!

coll.ensure_index({ :username => -1 })!
coll.ensure_index({ :username => Mongo::DESCENDING })!

!

# adding a special index types!
coll.ensure_index({ :loc => Mongo::GEO2D })!
coll.ensure_index({ :title => Mongo::TEXT })!

!

# droping an index!
coll.drop_index('username_1')!

!

# dropping all indexes for a collection!
coll.drop_indexes!
ODMs (Object Document Mappers)
Mongoid (http://mongoid.org/)
Mongo Mapper (http://mongomapper.com/)
Mongoid Example
# rails setup!
rails g mongoid:config!

!
# non-rails setup!
Mongoid.load!("path/to/your/mongoid.yml", :production)!

!
# document examples!
class Article!
include Mongoid::Document!
field :title, type: String!
embeds_many :comments!
end!

!
class Comment!
include Mongoid::Document!
field :comment_text, type: String!
embedded_in :article!
end!
What Next?
We’ve covered a lot of
ground quickly.
Come Find Us!
•

Github

•

Stack Overflow

•

MongoDB User Group
Further Reading
More Ways to Learn
Free Online Courses
http://education.mongodb.com/

Events & Webinars
http://www.mongodb.com/events

Presentations
http://www.mongodb.com/presentations
Thank you!
Brandon Black
Software Engineer, MongoDB
@brandonmblack

More Related Content

PDF
REST Web API with MongoDB
PDF
Mongoid in the real world
PDF
Elasticsearch - SEARCH & ANALYZE DATA IN REAL TIME
PPTX
Building Your First App with MongoDB
PPTX
Getting Started with Microsoft Bot Framework
PPTX
Word Play in the Digital Age: Building Text Bots with Tracery
PPTX
Web application, cookies and sessions
PDF
Front End Development Automation with Grunt
REST Web API with MongoDB
Mongoid in the real world
Elasticsearch - SEARCH & ANALYZE DATA IN REAL TIME
Building Your First App with MongoDB
Getting Started with Microsoft Bot Framework
Word Play in the Digital Age: Building Text Bots with Tracery
Web application, cookies and sessions
Front End Development Automation with Grunt

What's hot (18)

PDF
Build web application by express
PDF
JSON REST API for WordPress
PPTX
A slightly advanced introduction to node.js
ODP
Presentation of JSConf.eu
PDF
Djangocon 2014 angular + django
PPTX
The JSON REST API for WordPress
PDF
PHP Web Development
KEY
Server side scripting smack down - Node.js vs PHP
PDF
4Developers: Michał Papis- Publikowanie gemów
PPTX
moma-django overview --> Django + MongoDB: building a custom ORM layer
KEY
AMD - Why, What and How
PPTX
Node.js Express
PPTX
Using shortcode in plugin development
PDF
Php converted pdf
PDF
Updates to the java api for json processing for java ee 8
PDF
Differential Sync and JSON Patch @ SpringOne2GX 2014
PPTX
php (Hypertext Preprocessor)
Build web application by express
JSON REST API for WordPress
A slightly advanced introduction to node.js
Presentation of JSConf.eu
Djangocon 2014 angular + django
The JSON REST API for WordPress
PHP Web Development
Server side scripting smack down - Node.js vs PHP
4Developers: Michał Papis- Publikowanie gemów
moma-django overview --> Django + MongoDB: building a custom ORM layer
AMD - Why, What and How
Node.js Express
Using shortcode in plugin development
Php converted pdf
Updates to the java api for json processing for java ee 8
Differential Sync and JSON Patch @ SpringOne2GX 2014
php (Hypertext Preprocessor)
Ad

Similar to Webinar: Getting Started with Ruby and MongoDB (20)

PPTX
Webinar: Building Your First MongoDB App
PDF
Building your first app with MongoDB
PPTX
Building Your First Application with MongoDB
PPTX
Dev Jumpstart: Build Your First App with MongoDB
PPTX
Dev Jumpstart: Build Your First App with MongoDB
PDF
MongoDB and Ruby on Rails
PPTX
Webinar: Building Your First App in Node.js
PPTX
Webinar: Building Your First App in Node.js
PPTX
Dev Jumpstart: Build Your First App with MongoDB
PDF
MongoDB and Node.js
PDF
Mongo db eveningschemadesign
PPTX
Webinar: Building Your First App
PDF
10gen MongoDB Video Presentation at WebGeek DevCup
KEY
PDF
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
PDF
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
PPTX
Dev Jumpstart: Build Your First App with MongoDB
PPTX
Webinar: What's new in the .NET Driver
PPTX
Dev Jumpstart: Building Your First App
PDF
Parse cloud code
Webinar: Building Your First MongoDB App
Building your first app with MongoDB
Building Your First Application with MongoDB
Dev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDB
MongoDB and Ruby on Rails
Webinar: Building Your First App in Node.js
Webinar: Building Your First App in Node.js
Dev Jumpstart: Build Your First App with MongoDB
MongoDB and Node.js
Mongo db eveningschemadesign
Webinar: Building Your First App
10gen MongoDB Video Presentation at WebGeek DevCup
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB World 2018: Tutorial - Got Dibs? Building a Real-Time Bidding App wit...
Dev Jumpstart: Build Your First App with MongoDB
Webinar: What's new in the .NET Driver
Dev Jumpstart: Building Your First App
Parse cloud code
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
cuic standard and advanced reporting.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Approach and Philosophy of On baking technology
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Encapsulation_ Review paper, used for researhc scholars
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
cuic standard and advanced reporting.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Electronic commerce courselecture one. Pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
sap open course for s4hana steps from ECC to s4
Digital-Transformation-Roadmap-for-Companies.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Approach and Philosophy of On baking technology
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
The AUB Centre for AI in Media Proposal.docx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Review of recent advances in non-invasive hemoglobin estimation
Reach Out and Touch Someone: Haptics and Empathic Computing
MIND Revenue Release Quarter 2 2025 Press Release
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Encapsulation_ Review paper, used for researhc scholars

Webinar: Getting Started with Ruby and MongoDB

  • 1. Webinar: Getting Started with MongoDB and Ruby Brandon Black Software Engineer, MongoDB @brandonmblack
  • 4. +
  • 5. “I believe people want to express themselves when they program. They don't want to fight with the language. Programming languages must feel natural to programmers. I tried to make people enjoy programming and concentrate on the fun and creative part of programming when they use Ruby.” — Yukihiro “Matz” Matsumoto, Creator of Ruby (2001)
  • 7. MongoDB is a ___________ database • • • • • Document Open source High performance Horizontally scalable Full featured
  • 8. Document Database • • • • • • Not for .PDF & .DOC files A document is essentially an associative array Document = JSON object Document = PHP Array Document = Python Dict Document = Ruby Hash
  • 9. Open-Source • • • • • • MongoDB is an open source project Available on GitHub Licensed under the AGPL Started & sponsored by MongoDB, Inc. (10gen) Commercial licenses available Contributions welcome
  • 10. High Performance • Written in C++ • Extensive use of memory-mapped files 
 i.e. read-through write-through memory caching. • Runs nearly everywhere • Data serialized as BSON (fast parsing) • Full support for primary & secondary indexes • Document model = less work
  • 11. Shard 1 Shard 2 Shard 3 Horizontally Scalable Shard N
  • 12. Scalability & Performance Data Landscape Memcached MongoDB RDBMS Depth of Functionality
  • 13. Full Featured • • • • • • • Ad Hoc queries Real time aggregation Rich query capabilities Strongly consistent Geospatial features Native support for most programming languages Flexible schema (not schema-less!)
  • 14. Installation & Setup 1 Download From website: http://www.mongodb.org/downloads Package manager: sudo apt-get install mongodb-10gen brew install mongodb 2 Startup MongoDB mongod —dbpath /path/to/data 3 Connect with the mongo Shell Or in our case… IRB/Pry!
  • 16. Using the Ruby Driver Client Application Driver Re a ad Re d Write Secondary Primary Secondary
  • 17. Using the Ruby Driver # install gem and native extensions (optional)! gem install mongo gem install bson_ext require 'mongo'! include Mongo! ! # connecting to the database! client = MongoClient.new # defaults to localhost:27017! client = MongoClient.new('host1.example.com')! client = MongoClient.new('host1.example.com', 27017)! # using configuration options! opts = { :pool_size => 5, :pool_timeout => 5 }! client = MongoClient.new('host1.example.com', 27017, opts)!
  • 18. Using the Ruby Driver seeds = ['h1.example.com:27017',! 'h2.example.com:27017',! 'h3.example.com:27017']! ! # connecting to a replica set! client = MongoReplicaSetClient.new(seeds)! client = MongoReplicaSetClient.new(seeds, :read => :secondary)! # connecting to a sharded cluster! client = MongoShardedClient.new(seeds)! client = MongoShardedClient.new(seeds, :read => :secondary)! # using a connection string! ENV['MONGODB_URI'] = 'mongodb://host1:27017?ssl=true'! client = MongoClient.new!
  • 19. Using the Ruby Driver # using a database! db = client.db('blog')! db = client['blog']! ! client.drop_database('blog')! client.database_names! ! # using a collection! coll = db['posts']! ! coll.drop! db.collection_names!
  • 21. Building a Blog Models/Entities: • Users (Authors) • Articles • Comments • Tags/Categories
  • 22. In a relational application we would start by defining our schema.
  • 23. Typical Relational Diagram Category ·Name ·URL User ·Name ·Email address Article ·Name ·Slug ·Publish date ·Text Comment ·Comment ·Date ·Author Tag ·Name ·URL
  • 24. In MongoDB we start building and we let the schema evolve as we go. Like Ruby, it has a natural and enjoyable feeling to it!
  • 25. MongoDB Diagram Article User ·Name ·Email address ·Name ·Slug ·Publish date ·Text ·Author Comment[] ·Comment ·Date ·Author Tag[] ·Value Category[] ·Value
  • 26. Inserting a New Document # example document! author = {! :username => 'brandonblack',! :first => 'brandon',! :last => 'black'! }! ! # inserting into my blog database! client['blog']['users'].insert(author) No database or collection creation required!
  • 27. Inserting a New Document # example document! article = {! :title => 'Hello World'! :username => 'brandonblack',! :tags => ['ruby', 'getting started'],! :comments => [ # embedded docs ]! }! ! ! # inserting into my blog database! client['blog']['articles'].insert(article) No database or collection creation required!
  • 28. Finding Documents coll = client['blog']['users']! ! # finding a single document! coll.find_one! coll.find_one({ :username => 'brandonblack' })! coll.find_one({ :username => 'brandonblack' }, { :first => 1})! ! coll = client['blog']['articles']! ! # finding multiple documents (using cursors)! cursor = coll.find({ :username => 'brandonblack' }, :limit => 10)! cursor.each do |article|! puts article['title']! end!
  • 29. Updating and Deleting Documents # updating a document! article = { :title => 'Hello Ruby' }! coll.update({ '_id' => article_id }, article)! coll.update({ '_id' => article_id },! {'$set' => {:title => 'Hello Ruby'}})! ! # deleting a single document! coll.remove({ '_id' => article_id })! ! # delete multiple documents! coll.remove({ 'username' => 'brandonblack' })! ! # delete all documents in a collection! coll.remove!
  • 30. Indexes # running explain on a query! coll.find({ :username => 'brandonblack' }).explain! ! # showing collection indexes! coll.index_information! ! # adding an index! coll.ensure_index({ :username => 1 })! coll.ensure_index({ :username => Mongo::ASCENDING })! ! coll.ensure_index({ :username => -1 })! coll.ensure_index({ :username => Mongo::DESCENDING })! ! # adding a special index types! coll.ensure_index({ :loc => Mongo::GEO2D })! coll.ensure_index({ :title => Mongo::TEXT })! ! # droping an index! coll.drop_index('username_1')! ! # dropping all indexes for a collection! coll.drop_indexes!
  • 31. ODMs (Object Document Mappers) Mongoid (http://mongoid.org/) Mongo Mapper (http://mongomapper.com/)
  • 32. Mongoid Example # rails setup! rails g mongoid:config! ! # non-rails setup! Mongoid.load!("path/to/your/mongoid.yml", :production)! ! # document examples! class Article! include Mongoid::Document! field :title, type: String! embeds_many :comments! end! ! class Comment! include Mongoid::Document! field :comment_text, type: String! embedded_in :article! end!
  • 34. We’ve covered a lot of ground quickly.
  • 35. Come Find Us! • Github • Stack Overflow • MongoDB User Group
  • 37. More Ways to Learn Free Online Courses http://education.mongodb.com/ Events & Webinars http://www.mongodb.com/events Presentations http://www.mongodb.com/presentations
  • 38. Thank you! Brandon Black Software Engineer, MongoDB @brandonmblack