SlideShare a Scribd company logo
#MongoDBDays

Schema Design
Mike Friedman
Perl Engineer & Evangelist, MongoDB
Agenda
•  Working with documents
•  Evolving a Schema
•  Common Patterns
Terminology
RDBMS

MongoDB

Database

➜ Database

Table

➜ Collection

Row

➜ Document

Index

➜ Index

Join

➜ Embedded Document

Foreign Key

➜ Reference
Working with Documents
Modeling Data
MO N

XRays
Checkups

Allergies
Documents

Provide flexibility and
performance
Normalized Data
Category
·Name
·URL

User
·Name
·Email address

Article
·Name
·Slug
·Publish date
·Text

Comment
·Comment
·Date
·Author

Tag
·Name
·URL
De-Normalized (embedded) Data
Article

User
·Name
·Email address

·Name
·Slug
·Publish date
·Text
·Author

Comment[]
·Comment
·Date
·Author

Tag[]
·Value

Category[]
·Value
Relational Schema Design

Focus on data storage
Document Schema Design

Focus on data use
Schema Design Considerations
•  How do we manipulate the data?
–  Dynamic Ad-Hoc Queries
–  Atomic Updates
–  Map Reduce
•  What are the access patterns of the application?
–  Read/Write Ratio
–  Types of Queries / Updates
–  Data life-cycle and growth rate
Data Manipulation
Query Selectors
–  Scalar: $ne, $mod, $exists, $type, $lt, $lte, $gt, $gte
–  Vector: $in, $nin, $all, $size

Atomic Update Operators
–  Scalar: $inc, $set, $unset
–  Vector: $push, $pop, $pull, $pushAll, $pullAll, $addToSet
Data Access
Flexible Schemas
Ability to embed complex data structures
Secondary Indexes
Multi-Key Indexes
Aggregation Framework
–  $project, $match, $limit, $skip, $sort, $group, $unwind

No Joins
Getting Started
Library Management Application
Patrons
Books
Authors
Publishers
An Example

One to One Relations
Modeling Patrons

patron = {
_id: "joe",
name: "Joe Bookreader”
}
address = {
patron_id = "joe",
street: "123 Fake St. ",
city: "Faketon",
state: "MA",
zip: 12345
}

patron = {
_id: "joe",
name: "Joe Bookreader",
address: {
street: "123 Fake St. ",
city: "Faketon",
state: "MA",
zip: 12345
}
}
One to One Relations
Mostly the same as the relational approach
Generally good idea to embed “contains” relationships
Document model provides a holistic representation of
objects
An Example

One To Many Relations
Modeling Patrons
patron = {
_id: "joe",
name: "Joe Bookreader",
join_date: ISODate("2011-10-15"),
addresses: [
{street: "1 Vernon St.", city: "Newton", state: "MA", …},
{street: "52 Main St.", city: "Boston", state: "MA", …}
]
}
Publishers and Books
•  Publishers put out many books
•  Books have one publisher
Book

MongoDB: The Definitive Guide,
By Kristina Chodorow and Mike Dirolf
Published: 9/24/2010
Pages: 216
Language: English
Publisher: O’Reilly Media, CA
Modeling Books – Embedded Publisher

book = {
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher: {
name: "O’Reilly Media",
founded: "1980",
location: "CA"
}
}
Modeling Books & Publisher
Relationship
publisher = {
name: "O’Reilly Media",
founded: "1980",
location: "CA"
}
book = {
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English"
}
Publisher _id as a Foreign Key
publisher = {
_id: "oreilly",
name: "O’Reilly Media",
founded: "1980",
location: "CA"
}
book = {
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly"
}
Book _id as a Foreign Key
publisher = {
name: "O’Reilly Media",
founded: "1980",
location: "CA"
books: [ "123456789", ... ]
}
book = {
_id: "123456789",
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English"
}
Where Do You Put the Foreign Key?
Array of books inside of publisher
–  Makes sense when many means a handful of items
–  Useful when items have bound on potential growth

Reference to single publisher on books
–  Useful when items have unbounded growth (unlimited

number of books)
Another Example

One to Many Relations
Books and Patrons
Book can be checked out by one Patron at a time
Patrons can check out many books (but not a lot)
Modeling Checkouts
patron = {
_id: "joe",
name: "Joe Bookreader",
join_date: ISODate("2011-10-15"),
address: { ... }
}
book = {
_id: "123456789",
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
...
}
Modeling Checkouts
patron = {
_id: "joe",
name: "Joe Bookreader",
join_date: ISODate("2011-10-15"),
address: { ... },
checked_out: [
{ _id: "123456789", checked_out: "2012-10-15" },
{ _id: "987654321", checked_out: "2012-09-12" },
...
]
}
Denormalization

Provides data locality
Modeling Checkouts: Denormalized
patron = {
_id: "joe",
name: "Joe Bookreader",
join_date: ISODate("2011-10-15"),
address: { ... },
checked_out: [
{ _id: "123456789",
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
checked_out: ISODate("2012-10-15")
},
{ _id: "987654321"
title: "MongoDB: The Scaling Adventure",
...
}, ...
]
}
Referencing vs. Embedding
•  Embedding is a bit like pre-joined data
•  Document-level ops are easy for server to handle
•  Embed when the 'many' objects always appear with

(i.e. viewed in the context of) their parent
•  Reference when you need more flexibility
An Example

Many to Many Relations
Relation stored on both sides
book = {
_id: 123456789,
title: "MongoDB: The Definitive Guide",
authors = [ "kchodorow", "mdirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English"
}
author = {
_id: "kchodorow",
name: "Kristina Chodorow",
hometown: "Cincinnati",
books: [ 123456789, ... ]
}
An Example

Trees
Parent Links
book = {
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
category: "MongoDB"
}
category = { _id: MongoDB, parent: "Databases" }
category = { _id: Databases, parent: "Programming" }
Child Links
book = {
_id: 123456789,
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English"
}
category = { _id: MongoDB, children: [ 123456789, … ] }
category = { _id: Databases, children: ["MongoDB", "Postgres"}
category = { _id: Programming, children: ["DB", "Languages"] }
Modeling Trees
•  Parent Links

- Each node is stored as a document
- Contains the id of the parent
•  Child Links

- Each node contains the id’s of the children
- Can support graphs (multiple parents / child)
Array of Ancestors
book = {
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
categories: ["Programming", "Databases", "MongoDB” ]
}
book = {
title: "MySQL: The Definitive Guide",
authors: [ "Michael Kofler" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
parent: "MongoDB",
categories: [ "Programming", "Databases", "MongoDB"]
}
Conclusions
•  Relational modeling

- What data do I have?
- How do I isolate it?
•  Document modeling

- What do my users want?
- How do I provide it?
#MongoDBDays

Thank You
Mike Friedman
Perl Engineer & Evangelist, MongoDB

More Related Content

PDF
MongoDB Schema Design
PDF
Schema Design
PDF
Schema & Design
PPTX
Schema Design
PPTX
Jumpstart: Schema Design
PPTX
Schema Design
PPTX
MongoDB San Francisco 2013: Schema design presented by Jason Zucchetto, Consu...
PPTX
Building Your First App with MongoDB
MongoDB Schema Design
Schema Design
Schema & Design
Schema Design
Jumpstart: Schema Design
Schema Design
MongoDB San Francisco 2013: Schema design presented by Jason Zucchetto, Consu...
Building Your First App with MongoDB

What's hot (12)

PDF
JSON Learning
PPTX
MongoDB Schema Design: Four Real-World Examples
PPTX
Dev Jumpstart: Schema Design Best Practices
KEY
Schema Design
PPTX
MongoDB + Spring
PDF
Redis for search - Dvir Volk, Redis Labs
PDF
JSON-LD
ODP
MongoDB - javascript for your data
PPTX
MTA css flow, positioning, and styling
PDF
Turning the Page on Digital Content
PDF
GEDCOM X - FamilySearch Developers Conference 2014
PPTX
Basic about website george
JSON Learning
MongoDB Schema Design: Four Real-World Examples
Dev Jumpstart: Schema Design Best Practices
Schema Design
MongoDB + Spring
Redis for search - Dvir Volk, Redis Labs
JSON-LD
MongoDB - javascript for your data
MTA css flow, positioning, and styling
Turning the Page on Digital Content
GEDCOM X - FamilySearch Developers Conference 2014
Basic about website george
Ad

Viewers also liked (17)

PPTX
Webinar: Building Your First MongoDB App
PDF
Audizione AgID: UNINFO in generale
PDF
Intervento Pier Angelo Sottile dell'8 maggio ...
PPTX
Civil rights in south carolina
PDF
SMAU 2013 "Le norme tecniche del settore ICT" - UNINFO
KEY
Sharding with MongoDB (Eliot Horowitz)
PPT
V1.0 History Of Game Community
PDF
Harmony intune final
PPTX
PPTX
Days of decision – 1965 1967
PPTX
Essential Tools For Your Big Data Arsenal
PDF
Indexing and Query Optimizer (Mongo Austin)
PPT
MongoDB Tick Data Presentation
PPT
Webinar: Making A Single View of the Customer Real with MongoDB
PPTX
Welcome to MongoDB London 2013
PPTX
Silent spring
PDF
How queries work with sharding
Webinar: Building Your First MongoDB App
Audizione AgID: UNINFO in generale
Intervento Pier Angelo Sottile dell'8 maggio ...
Civil rights in south carolina
SMAU 2013 "Le norme tecniche del settore ICT" - UNINFO
Sharding with MongoDB (Eliot Horowitz)
V1.0 History Of Game Community
Harmony intune final
Days of decision – 1965 1967
Essential Tools For Your Big Data Arsenal
Indexing and Query Optimizer (Mongo Austin)
MongoDB Tick Data Presentation
Webinar: Making A Single View of the Customer Real with MongoDB
Welcome to MongoDB London 2013
Silent spring
How queries work with sharding
Ad

Similar to Schema Design (20)

PDF
Schema Design
PPTX
Schema Design
PPTX
Schema design mongo_boston
PPTX
Schema Design
PPT
MongoDB Schema Design
PDF
Schema Design
PPTX
Webinar: Schema Design
PDF
Schema Design
PDF
Schema Design
PDF
Schema design
PPTX
Schema Design
PDF
Schema Design
PPTX
Webinar: Schema Design
PPTX
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
PDF
Building your first app with mongo db
PPTX
Webinar: Back to Basics: Thinking in Documents
KEY
MongoDB Hadoop DC
PPTX
lecture_34e.pptx
KEY
Schema design
PPTX
Schema Design
Schema Design
Schema design mongo_boston
Schema Design
MongoDB Schema Design
Schema Design
Webinar: Schema Design
Schema Design
Schema Design
Schema design
Schema Design
Schema Design
Webinar: Schema Design
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
Building your first app with mongo db
Webinar: Back to Basics: Thinking in Documents
MongoDB Hadoop DC
lecture_34e.pptx
Schema design

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)

PPTX
Belch_12e_PPT_Ch18_Accessible_university.pptx
PDF
Laughter Yoga Basic Learning Workshop Manual
PDF
SIMNET Inc – 2023’s Most Trusted IT Services & Solution Provider
PPTX
New Microsoft PowerPoint Presentation - Copy.pptx
PDF
Ôn tập tiếng anh trong kinh doanh nâng cao
PPTX
job Avenue by vinith.pptxvnbvnvnvbnvbnbmnbmbh
DOCX
unit 2 cost accounting- Tender and Quotation & Reconciliation Statement
PDF
kom-180-proposal-for-a-directive-amending-directive-2014-45-eu-and-directive-...
PDF
WRN_Investor_Presentation_August 2025.pdf
PPTX
HR Introduction Slide (1).pptx on hr intro
PPTX
The Marketing Journey - Tracey Phillips - Marketing Matters 7-2025.pptx
PPTX
AI-assistance in Knowledge Collection and Curation supporting Safe and Sustai...
PDF
pdfcoffee.com-opt-b1plus-sb-answers.pdfvi
PDF
How to Get Business Funding for Small Business Fast
PDF
Nidhal Samdaie CV - International Business Consultant
PDF
Chapter 5_Foreign Exchange Market in .pdf
PPTX
Amazon (Business Studies) management studies
PDF
Reconciliation AND MEMORANDUM RECONCILATION
PPTX
5 Stages of group development guide.pptx
PDF
Solara Labs: Empowering Health through Innovative Nutraceutical Solutions
Belch_12e_PPT_Ch18_Accessible_university.pptx
Laughter Yoga Basic Learning Workshop Manual
SIMNET Inc – 2023’s Most Trusted IT Services & Solution Provider
New Microsoft PowerPoint Presentation - Copy.pptx
Ôn tập tiếng anh trong kinh doanh nâng cao
job Avenue by vinith.pptxvnbvnvnvbnvbnbmnbmbh
unit 2 cost accounting- Tender and Quotation & Reconciliation Statement
kom-180-proposal-for-a-directive-amending-directive-2014-45-eu-and-directive-...
WRN_Investor_Presentation_August 2025.pdf
HR Introduction Slide (1).pptx on hr intro
The Marketing Journey - Tracey Phillips - Marketing Matters 7-2025.pptx
AI-assistance in Knowledge Collection and Curation supporting Safe and Sustai...
pdfcoffee.com-opt-b1plus-sb-answers.pdfvi
How to Get Business Funding for Small Business Fast
Nidhal Samdaie CV - International Business Consultant
Chapter 5_Foreign Exchange Market in .pdf
Amazon (Business Studies) management studies
Reconciliation AND MEMORANDUM RECONCILATION
5 Stages of group development guide.pptx
Solara Labs: Empowering Health through Innovative Nutraceutical Solutions

Schema Design

  • 1. #MongoDBDays Schema Design Mike Friedman Perl Engineer & Evangelist, MongoDB
  • 2. Agenda •  Working with documents •  Evolving a Schema •  Common Patterns
  • 3. Terminology RDBMS MongoDB Database ➜ Database Table ➜ Collection Row ➜ Document Index ➜ Index Join ➜ Embedded Document Foreign Key ➜ Reference
  • 7. Normalized Data Category ·Name ·URL User ·Name ·Email address Article ·Name ·Slug ·Publish date ·Text Comment ·Comment ·Date ·Author Tag ·Name ·URL
  • 8. De-Normalized (embedded) Data Article User ·Name ·Email address ·Name ·Slug ·Publish date ·Text ·Author Comment[] ·Comment ·Date ·Author Tag[] ·Value Category[] ·Value
  • 11. Schema Design Considerations •  How do we manipulate the data? –  Dynamic Ad-Hoc Queries –  Atomic Updates –  Map Reduce •  What are the access patterns of the application? –  Read/Write Ratio –  Types of Queries / Updates –  Data life-cycle and growth rate
  • 12. Data Manipulation Query Selectors –  Scalar: $ne, $mod, $exists, $type, $lt, $lte, $gt, $gte –  Vector: $in, $nin, $all, $size Atomic Update Operators –  Scalar: $inc, $set, $unset –  Vector: $push, $pop, $pull, $pushAll, $pullAll, $addToSet
  • 13. Data Access Flexible Schemas Ability to embed complex data structures Secondary Indexes Multi-Key Indexes Aggregation Framework –  $project, $match, $limit, $skip, $sort, $group, $unwind No Joins
  • 16. An Example One to One Relations
  • 17. Modeling Patrons patron = { _id: "joe", name: "Joe Bookreader” } address = { patron_id = "joe", street: "123 Fake St. ", city: "Faketon", state: "MA", zip: 12345 } patron = { _id: "joe", name: "Joe Bookreader", address: { street: "123 Fake St. ", city: "Faketon", state: "MA", zip: 12345 } }
  • 18. One to One Relations Mostly the same as the relational approach Generally good idea to embed “contains” relationships Document model provides a holistic representation of objects
  • 19. An Example One To Many Relations
  • 20. Modeling Patrons patron = { _id: "joe", name: "Joe Bookreader", join_date: ISODate("2011-10-15"), addresses: [ {street: "1 Vernon St.", city: "Newton", state: "MA", …}, {street: "52 Main St.", city: "Boston", state: "MA", …} ] }
  • 21. Publishers and Books •  Publishers put out many books •  Books have one publisher
  • 22. Book MongoDB: The Definitive Guide, By Kristina Chodorow and Mike Dirolf Published: 9/24/2010 Pages: 216 Language: English Publisher: O’Reilly Media, CA
  • 23. Modeling Books – Embedded Publisher book = { title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher: { name: "O’Reilly Media", founded: "1980", location: "CA" } }
  • 24. Modeling Books & Publisher Relationship publisher = { name: "O’Reilly Media", founded: "1980", location: "CA" } book = { title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English" }
  • 25. Publisher _id as a Foreign Key publisher = { _id: "oreilly", name: "O’Reilly Media", founded: "1980", location: "CA" } book = { title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher_id: "oreilly" }
  • 26. Book _id as a Foreign Key publisher = { name: "O’Reilly Media", founded: "1980", location: "CA" books: [ "123456789", ... ] } book = { _id: "123456789", title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English" }
  • 27. Where Do You Put the Foreign Key? Array of books inside of publisher –  Makes sense when many means a handful of items –  Useful when items have bound on potential growth Reference to single publisher on books –  Useful when items have unbounded growth (unlimited number of books)
  • 28. Another Example One to Many Relations
  • 29. Books and Patrons Book can be checked out by one Patron at a time Patrons can check out many books (but not a lot)
  • 30. Modeling Checkouts patron = { _id: "joe", name: "Joe Bookreader", join_date: ISODate("2011-10-15"), address: { ... } } book = { _id: "123456789", title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], ... }
  • 31. Modeling Checkouts patron = { _id: "joe", name: "Joe Bookreader", join_date: ISODate("2011-10-15"), address: { ... }, checked_out: [ { _id: "123456789", checked_out: "2012-10-15" }, { _id: "987654321", checked_out: "2012-09-12" }, ... ] }
  • 33. Modeling Checkouts: Denormalized patron = { _id: "joe", name: "Joe Bookreader", join_date: ISODate("2011-10-15"), address: { ... }, checked_out: [ { _id: "123456789", title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], checked_out: ISODate("2012-10-15") }, { _id: "987654321" title: "MongoDB: The Scaling Adventure", ... }, ... ] }
  • 34. Referencing vs. Embedding •  Embedding is a bit like pre-joined data •  Document-level ops are easy for server to handle •  Embed when the 'many' objects always appear with (i.e. viewed in the context of) their parent •  Reference when you need more flexibility
  • 35. An Example Many to Many Relations
  • 36. Relation stored on both sides book = { _id: 123456789, title: "MongoDB: The Definitive Guide", authors = [ "kchodorow", "mdirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English" } author = { _id: "kchodorow", name: "Kristina Chodorow", hometown: "Cincinnati", books: [ 123456789, ... ] }
  • 38. Parent Links book = { title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", category: "MongoDB" } category = { _id: MongoDB, parent: "Databases" } category = { _id: Databases, parent: "Programming" }
  • 39. Child Links book = { _id: 123456789, title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English" } category = { _id: MongoDB, children: [ 123456789, … ] } category = { _id: Databases, children: ["MongoDB", "Postgres"} category = { _id: Programming, children: ["DB", "Languages"] }
  • 40. Modeling Trees •  Parent Links - Each node is stored as a document - Contains the id of the parent •  Child Links - Each node contains the id’s of the children - Can support graphs (multiple parents / child)
  • 41. Array of Ancestors book = { title: "MongoDB: The Definitive Guide", authors: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", categories: ["Programming", "Databases", "MongoDB” ] } book = { title: "MySQL: The Definitive Guide", authors: [ "Michael Kofler" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", parent: "MongoDB", categories: [ "Programming", "Databases", "MongoDB"] }
  • 42. Conclusions •  Relational modeling - What data do I have? - How do I isolate it? •  Document modeling - What do my users want? - How do I provide it?
  • 43. #MongoDBDays Thank You Mike Friedman Perl Engineer & Evangelist, MongoDB