building your first app: an introduction to mongodb
TRANSCRIPT
![Page 1: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/1.jpg)
Software Engineer, 10gen
@brandonmblack
Brandon Black
#MongoDBDays
Building Your First App:An Introduction to MongoDB
![Page 2: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/2.jpg)
What is MongoDB?
![Page 3: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/3.jpg)
MongoDB is a ___________ database• Document
• Open source
• High performance
• Horizontally scalable
• Full featured
![Page 4: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/4.jpg)
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
![Page 5: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/5.jpg)
Open Source
• MongoDB is an open source project
• On GitHub
• Licensed under the AGPL
• Started & sponsored by 10gen
• Commercial licenses available
• Contributions welcome
![Page 6: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/6.jpg)
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
![Page 7: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/7.jpg)
Horizontally Scalable
![Page 8: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/8.jpg)
Full Featured
• Ad Hoc queries
• Real time aggregation
• Rich query capabilities
• Traditionally consistent
• Geospatial features
• Support for most programming languages
• Flexible schema
![Page 9: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/9.jpg)
Database Landscape
![Page 10: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/10.jpg)
http://www.mongodb.org/downloads
![Page 11: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/11.jpg)
Mongo Shell
![Page 12: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/12.jpg)
Document Database
![Page 13: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/13.jpg)
RDBMS MongoDBTable, View ➜ CollectionRow ➜ DocumentIndex ➜ IndexJoin ➜ Embedded
DocumentForeign Key ➜ ReferencePartition ➜ Shard
Terminology
![Page 14: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/14.jpg)
Typical (relational) ERD
![Page 15: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/15.jpg)
MongoDB ERD
![Page 16: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/16.jpg)
http://www.flickr.com/photos/somegeekintn/3484353131/
Library Management Application
![Page 17: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/17.jpg)
First step in any application isDetermine your entities
![Page 18: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/18.jpg)
Library Management Application Entities
• Library Patrons (users)
• Books (catalog)
• Authors
• Publishers
• Categories ??
![Page 19: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/19.jpg)
In a relational based appWe would start by doing schema design
![Page 20: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/20.jpg)
Relational Schema Design• Large ERD Diagrams
• Complex create table statements
• ORMs to map tables to objects
• Tables just to join tables together
• For this simple app we'd have 5 tables and 5 join tables
• Lots of revisions until we get it just right
![Page 21: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/21.jpg)
In a MongoDB based appWe start building our appand let the schema evolve
![Page 22: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/22.jpg)
MongoDB Collections
• Users
• Books
• Authors
• Publishers
![Page 23: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/23.jpg)
No Common LanguageMongo Shell
![Page 24: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/24.jpg)
Working with MongoDB
![Page 25: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/25.jpg)
user = {
username: 'fred.jones',
first_name: 'fred',
last_name: 'jones',
}
Start with an Object (or array, hash, dict, etc)
![Page 26: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/26.jpg)
> db.users.insert(user)
Insert the Record
No collection creation needed
![Page 27: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/27.jpg)
> db.users.findOne()
{
"_id" : ObjectId("50804d0bd94ccab2da652599"),
"username" : "fred.jones",
"first_name" : "fred",
"last_name" : "jones"
}
Querying for the User
![Page 28: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/28.jpg)
_id
• _id is the primary key in MongoDB
• Automatically indexed
• Automatically created as an ObjectId if not provided
• Any unique immutable value could be used
![Page 29: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/29.jpg)
ObjectId
• ObjectId is a special 12 byte value
• Guaranteed to be unique across your cluster
• ObjectId("50804d0bd94ccab2da652599") |-------------||---------||-----||----------| ts mac pid inc
![Page 30: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/30.jpg)
> db.author.insert({
first_name: 'j.r.r.',
last_name: 'tolkien',
bio: 'J.R.R. Tolkien (1892.1973), beloved throughout the world as the creator of The Hobbit and The Lord of the Rings, was a professor of Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of Merton College until his retirement in 1959. His chief interest was the linguistic aspects of the early English written tradition, but even as he studied these classics he was creating a set of his own.'
})
Creating an Author
![Page 31: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/31.jpg)
> db.author.findOne( { last_name : 'tolkien' } )
{
"_id" : ObjectId("507ffbb1d94ccab2da652597"),
"first_name" : "j.r.r.",
"last_name" : "tolkien",
"bio" : "J.R.R. Tolkien (1892.1973), beloved throughout the world as the creator of The Hobbit and The Lord of the Rings, was a professor of Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of Merton College until his retirement in 1959. His chief interest was the linguistic aspects of the early English written tradition, but even as he studied these classics he was creating a set of his own."
}
Querying for Our Author
![Page 32: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/32.jpg)
> db.books.insert({
title: 'fellowship of the ring, the',
author: ObjectId("507ffbb1d94ccab2da652597"),
language: 'english',
genre: ['fantasy', 'adventure'],
publication: {
name: 'george allen & unwin',
location: 'London',
date: new Date('21 July 1954'),
}
})
Creating a Book
http://society6.com/PastaSoup/The-Fellowship-of-the-Ring-ZZc_Print/
![Page 33: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/33.jpg)
> db.books.findOne({language: 'english'}, {genre: 1})
{
"_id" : ObjectId("50804391d94ccab2da652598"),
"genre" : [
"fantasy",
"adventure"
]
}
Multiple Values Per Key
![Page 34: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/34.jpg)
> db.books.findOne({genre: 'fantasy'}, {title: 1})
{
"_id" : ObjectId("50804391d94ccab2da652598"),
"title" : "fellowship of the ring, the"
}
Multiple Values Per Key
Query key with single value or multiple values the same way.
![Page 35: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/35.jpg)
> db.books.findOne({}, {publication: 1})
{
"_id" : ObjectId("50804ec7d94ccab2da65259a"),
"publication" : {
"name" : "george allen & unwin",
"location" : "London",
"date" : ISODate("1954-07-21T04:00:00Z")
}
}
Nested Values
![Page 36: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/36.jpg)
> db.books.findOne({'publication.date' :
{ $lt : new Date('21 June 1960')}}
){
"_id" : ObjectId("50804391d94ccab2da652598"),"title" : "fellowship of the ring, the","author" : ObjectId("507ffbb1d94ccab2da652597"),"language" : "english","genre" : [ "fantasy", "adventure" ],"publication" : {
"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-
21T04:00:00Z")}
}
Query Nested Values with Dot Notation
![Page 37: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/37.jpg)
> db.books.update(
{"_id" : ObjectId("50804391d94ccab2da652598")},
{
$set : {
isbn: '0547928211',
pages: 432
}
})
Update Books
This is true agile development . I’m simply changing how I work with the data, and the database follows.
![Page 38: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/38.jpg)
db.books.findOne(){
"_id" : ObjectId("50804ec7d94ccab2da65259a"),"author" : ObjectId("507ffbb1d94ccab2da652597"),"genre" : [ "fantasy", "adventure" ],"isbn" : "0395082544","language" : "english","pages" : 432,"publication" : {
"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-
21T04:00:00Z")},"title" : "fellowship of the ring, the"
}
Updated Book Record
![Page 39: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/39.jpg)
> db.books.ensureIndex({title: 1})
> db.books.ensureIndex({genre : 1})
> db.books.ensureIndex({'publication.date': -1})
Creating Indexes
![Page 40: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/40.jpg)
> db.books.findOne({title : /^fell/}){
"_id" : ObjectId("50804ec7d94ccab2da65259a"),"author" : ObjectId("507ffbb1d94ccab2da652597"),"genre" : [ "fantasy", "adventure" ],"isbn" : "0395082544","language" : "english","pages" : 432,"publication" : {
"name" : "george allen & unwin","location" : "London","date" : ISODate("1954-07-
21T04:00:00Z")},"title" : "fellowship of the ring, the"
}
Query with Regular Expressions
![Page 41: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/41.jpg)
> db.books.insert({ title: 'two towers, the',author:
ObjectId("507ffbb1d94ccab2da652597"),language: 'english',isbn : "034523510X",genre: ['fantasy', 'adventure'],pages: 447,publication: {
name: 'george allen & unwin',
location: 'London', date: new Date('11 Nov 1954'),
}})
Adding More Books
http://society6.com/PastaSoup/The-Two-Towers-XTr_Print/
![Page 42: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/42.jpg)
> db.books.insert({ title: 'return of the king, the',author:
ObjectId("507ffbb1d94ccab2da652597"),language: 'english',isbn : "0345248295",genre: ['fantasy', 'adventure'],pages: 544,publication: {
name: 'george allen & unwin',
location: 'London', date: new Date('20 Oct 1955'),
}})
Adding More Books
http://society6.com/PastaSoup/The-Return-of-the-King-Jsc_Print/
![Page 43: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/43.jpg)
> db.books.find( { author: ObjectId("507ffbb1d94ccab2da652597")}) .sort({ 'publication.date' : -1}) .limit(1)
{"_id" : ObjectId("5080d33ed94ccab2da65259d"),"title" : "return of the king, the","author" : ObjectId("507ffbb1d94ccab2da652597"),"language" : "english","isbn" : "0345248295","genre" : [ "fantasy", "adventure" ],"pages" : 544,"publication" : {
"name" : "george allen & unwin","location" : "London","date" : ISODate("1955-10-
20T04:00:00Z")}
}
Cursors
![Page 44: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/44.jpg)
page_num = 3;results_per_page = 10;cursor = db.books.find() .sort({ "publication.date" : -1 }) .skip((page_num - 1) * results_per_page) .limit(results_per_page);
Simple Pager
![Page 45: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/45.jpg)
> book = db.books.findOne({"title" : "return of the king, the"})
> db.author.findOne({_id: book.author}){
"_id" : ObjectId("507ffbb1d94ccab2da652597"),"first_name" : "j.r.r.","last_name" : "tolkien","bio" : "J.R.R. Tolkien (1892.1973), beloved throughout
the world as the creator of The Hobbit and The Lord of the Rings, was a professor of Anglo-Saxon at Oxford, a fellow of Pembroke College, and a fellow of Merton College until his retirement in 1959. His chief interest was the linguistic aspects of the early English written tradition, but even as he studied these classics he was creating a set of his own."}
Finding an Author by Book
![Page 46: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/46.jpg)
MongoDB Drivers
![Page 47: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/47.jpg)
Real applications are not built in the shell
![Page 48: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/48.jpg)
MongoDB Drivers
• Drivers connect to mongo servers
• Drivers translate BSON into native types
• The MongoDB shell is not a driver, but works like one in some ways
• Installed using typical means (npm, pecl, gem, pip)
![Page 49: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/49.jpg)
MongoDB has native bindings for over 12 languages
![Page 50: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/50.jpg)
![Page 51: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/51.jpg)
![Page 52: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/52.jpg)
Next Steps
![Page 53: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/53.jpg)
We've introduced a lot of concepts here
![Page 54: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/54.jpg)
Schema Design @ 10:35am
![Page 55: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/55.jpg)
Indexing @ 12:15pm
![Page 56: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/56.jpg)
Replication @ 1:45pm
![Page 57: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/57.jpg)
Sharding @ 2:30pm
![Page 58: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/58.jpg)
• What’s next?– Schema Design @ 10:35am– Indexing @ 12:15pm– Replication @ 1:45pm– Sharding @ 2:30pm– Webinar: Technical Overview of MongoDB (March
7th)– MongoDB User Group
• Resourceshttps://education.10gen.com/http://www.10gen.com/presentationshttp://github.com/brandonblack/presentations
![Page 59: Building Your First App: An Introduction to MongoDB](https://reader036.vdocuments.net/reader036/viewer/2022062300/55515a85b4c905a8768b4bea/html5/thumbnails/59.jpg)
Software Engineer, 10gen
@brandonmblack
Brandon Black
#MongoDBDays
Thank You