Documents
Can store JSON types - strings, integers, floats, doubles,
arrays, objects, null, boolean
Special types - data, object id, binary, regex, and code
16mb hard limit
Every document can have different keys
Slide 15
Slide 15 text
Collections
Slide 16
Slide 16 text
Collections
Logical groups of documents
Indexes
Slide 17
Slide 17 text
Databases
Contain collections
Authentication
Global read/write user
Local read/write user
Local read only user
>
show
dbs
admin
blog
>
use
blog
switched
to
blog
>
show
collections
posts
Slide 22
Slide 22 text
>
db.posts.count()
1
Slide 23
Slide 23 text
>
db.posts.findOne()
{
_id
:
ObjectId(‘8dfhosiahdf89sf9sd’),
title
:
“Hello
world!”,
body
:
“Lorem
ipsum...”,
author
:
{
name
:
“Alex”
}
}
>
db.posts.find().limit(1)
>
db.posts.find().limit(1).pretty()
Slide 24
Slide 24 text
>
db.posts.insert({
title
:
“Another
post”,
body
:
“Dolor
sit
amet...”
author
:
{
name
:
“Alex”
},
tags
:
[“PHP”,
“MongoDB”]
})
>
db.posts.save({...})
Slide 25
Slide 25 text
SELECT
*
FROM
posts
WHERE
title
=
“Another
Post”
db.posts.find({title
:
“Another
Post”})
{
_id
:
ObjectId(‘8dfhosiahdf89sf9sd’),
title
:
“Another
post”,
body
:
“Dolor
sit
amet...”,
author
:
{name
:
“Alex”},
tags
:
[“PHP”,
“MongoDB”]
}
Slide 26
Slide 26 text
SELECT
body
FROM
posts
WHERE
title
=
“Another
Post”
db.posts.find({title
:
“Another
Post”},
{body
:
1})
{
_id
:
ObjectId(‘8dfhosiahdf89sf9sd’),
body
:
“Dolor
sit
amet...”
}
db.people.insert({name
:
“Alex”,
age:
22,
sex
:
“Male”})
db.people.insert({name
:
“Nick”,
age:
24,
sex
:
“Male”})
db.people.insert({name
:
“Steph”,
age:
28,
sex
:
“Female”})
Slide 31
Slide 31 text
SELECT
*
FROM
people
WHERE
age
>
22
db.people.find({age
:
{$gt
:
22}})
Slide 32
Slide 32 text
SELECT
*
FROM
people
WHERE
age
<=
25
db.people.find({age
:
{$lte
:
25}})
Slide 33
Slide 33 text
$gt
Greater
than
$gte
Greater
than
or
equal
to
$lt
Less
than
$lte
Less
than
or
equal
to
$ne
Not
equal
to
$in
In
array
$nin
Not
in
array
Slide 34
Slide 34 text
$mod
Mod
operator
$all
Matches
all
values
in
array
$size
Size
of
array
$exists
Key
in
array
exists
$type
Matches
data
type
$not
Negates
value
of
another
operator
$or
Where
==
OR
==
$nor
Where
!==
AND
!==
Slide 35
Slide 35 text
//
single
ascending
index
db.people.ensureIndex({name:1})
Slide 36
Slide 36 text
//
single
descending
index
db.people.ensureIndex({name:-‐1})
$inc
Increment
value
$set
Set
field
to
value
$unset
Delete
field
$push
Appends
field
to
value
(if
field
is
an
array
otherwise
works
like
$set)
$pushAll
Multiple
$push
$addToSet
$push
only
if
not
exists
$pop
Array
pop
$pull
Removes
all
occurrences
of
value
Slide 44
Slide 44 text
$pull
Removes
all
occurrences
of
value
$pullAll
Pull
all
values
$rename
Rename
field
$bit
Bitwise
update
of
field
Double query
+ Don’t need to worry about hard limit
+ Much easier querying
+/- Double query
Slide 52
Slide 52 text
Some untruths
“MongoDB is not single server durable”
“MongoDB will lose my data because it is not ACID
compliant”
“I need 12 terabytes of RAM to use MongoDB”
“MongoDB is just CouchDB but with more marketing weight
behind it”
Slide 53
Slide 53 text
How we use MongoDB
AD
BP
Estates
Blackboard
CMIS
Nucleus
Slide 54
Slide 54 text
How we use MongoDB
Nucleus
.xml
.json
.csv
.rdfxml
.tutle
.n3
.ntriples
.kml
Slide 55
Slide 55 text
Appropriate Use Caes
Logs
Data warehousing / archiving
Location based apps (Foursquare / o2 Priorities)
Ecommerce (with RDBMS for billing)
Gaming
Real time stats
Slide 56
Slide 56 text
Less well suited use cases
Tractional systems
Epic join based query based systems
Slide 57
Slide 57 text
CodeIgniter and MongoDB
CodeIgniter library - http://lncn.eu/fmy5
Follows the query builder (active record) database library
Version 2.0 almost finished
CodeIgniter Library v2.0
Multiple database support
Epic code clean up
Remove CodeIgniter-only functions so can be used in other
frameworks or vanilla PHP
Supports new MongoDB 2.0+ features
Slide 60
Slide 60 text
Where can I find out more?
mongodb.com
groups.google.com/group/mongodb-user
irc://irc.freenode.net/#mongodb
blog.boxedice.com
cookbook.mongodb.com
10gen.com/events