Slide 1

Slide 1 text

MongoDB at Fiesta @mdirolf @fiesta

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Cc: Subject: To: Good article [email protected], [email protected], [email protected], [email protected] Thought you guys might enjoy this article: http://nymag.com/arts/books/features/jeffrey-eugenides

Slide 5

Slide 5 text

Cc: Subject: To: [email protected], [email protected], [email protected], [email protected] family@fiesta.cc Good article Thought you guys might enjoy this article: http://nymag.com/arts/books/features/jeffrey-eugenides

Slide 6

Slide 6 text

Data Modeling Flexibility is a blessing (and a curse).

Slide 7

Slide 7 text

0-embed {    _id:  PERSON_ID,    name:  "Mike  Dirolf",    pw:  "Some  Hashed  Password" } Person

Slide 8

Slide 8 text

0-embed {    _id:  ADDRESS_ID,    person:  PERSON_ID,    address:  "[email protected]" } Address

Slide 9

Slide 9 text

0-embed {    _id:  GROUP_ID,    domain:  "gitlists.com" } Group

Slide 10

Slide 10 text

0-embed {    _id:  MEMBERSHIP_ID,    person:  PERSON_ID,    group:  GROUP_ID,    address:  ADDRESS_ID,    group_name:  "family" } Membership

Slide 11

Slide 11 text

0-embed Other member addresses for an address & group_name: 1.  var  x  =  db.addresses.findOne({address:  address}) 2.  var  y  =  db.memberships.findOne({person:  x.person,                                                                group_name:  group_name}) 3.  var  z  =  db.memberships.find({group:  y.group}) 4.  for  m  in  z:  db.addresses.findOne({person:  m.person})

Slide 12

Slide 12 text

Embed Everything {    _id:  GROUP_ID,    domain:  "gitlists.com",    memberships:  [{        address:  "[email protected]",        name:  "Mike  Dirolf",        pw:  "Some  Hashed  Password",        person_addresses  =            ["[email protected]",              "[email protected]",              ...],        group_name:  "family"    },  ...] }

Slide 13

Slide 13 text

Embed Everything Other member addresses for an address & group_name: db.groups.findOne({memberships:                                        {$elemMatch:                                            {address:  address,                                              group_name:  group_name}}})

Slide 14

Slide 14 text

Embed Everything How do we change a Person’s name?

Slide 15

Slide 15 text

Embed Trivial Cases {    _id:  PERSON_ID,    name:  "Mike  Dirolf",    pw:  "Some  Hashed  Password",    addresses:  ["[email protected]",                            "[email protected]",  ...],    memberships:  [{        address:  "[email protected]",        group_name:  "family",        group:  GROUP_ID    },  ...] }

Slide 16

Slide 16 text

Embed Trivial Cases Other member addresses for an address & group_name: 1.  var  x  =  db.users.findOne({address:  address,                                                          "groups.name":  group_name}) 2.  db.users.find({"groups.id":  ...})

Slide 17

Slide 17 text

Scratch That Flexibility is a blessing.

Slide 18

Slide 18 text

Flexible “Schemas” {“author”:  “mike”,  “text”:  “...”} {“author”:  “eliot”,  “text”:  “...”,  “tags”:  [“mongodb”]}

Slide 19

Slide 19 text

To munge, or not to munge...

Slide 20

Slide 20 text

if user.get("munge", True): do_munge(...)

Slide 21

Slide 21 text

Dynamic Queries 1. Development speed 2. Natural for dynamic languages 3. Easy for administration

Slide 22

Slide 22 text

ODMs vs. Using Drivers Directly http://blog.fiesta.cc/post/12167731260/on-object- document-mapping

Slide 23

Slide 23 text

@fiesta @mdirolf