com presentations: IPC and PHPTEK talks. Start of MongoDB tutorial.: mongo-tut-summercamp14.xml slides/mongodb/aggr-op-group-collect-example.xml slides/mongodb/aggr-op-group-compound-example.xml slides/mongodb/aggr-op-group-sum-count-example.xml slides/mongodb/aggr-op-limit-example.xml slides/mongodb/aggr-op-match-example.xml slides/mongodb/aggr-op-match-with-query-example.xml slides/mongodb/aggr-op-project-create-sub-example.xml slides/mongodb/a

[email protected] (Derick Rethans)
Newsgroups php.pres
Message-ID <[email protected]>
Commit:    66295908554b148c04fe0420ceecfbafcaee2c5b
Author:    Derick Rethans <[email protected]>         Tue, 2 Sep 2014 08:06:05 +0100
Parents:   c60518b11bc4c3b7137ad99d76a8f0c355140d7a
Branches:  master

Link:       http://git.php.net/?p=presentations.git;a=commitdiff;h=66295908554b148c04fe0420ceecfbafcaee2c5b

Log:
IPC and PHPTEK talks. Start of MongoDB tutorial.

Changed paths:
  A  mongo-tut-summercamp14.xml
  M  slides/mongodb/aggr-op-group-collect-example.xml
  M  slides/mongodb/aggr-op-group-compound-example.xml
  M  slides/mongodb/aggr-op-group-sum-count-example.xml
  M  slides/mongodb/aggr-op-limit-example.xml
  M  slides/mongodb/aggr-op-match-example.xml
  M  slides/mongodb/aggr-op-match-with-query-example.xml
  M  slides/mongodb/aggr-op-project-create-sub-example.xml
  M  slides/mongodb/aggr-op-project-incl-excl-example.xml
  M  slides/mongodb/aggr-op-project-rename-compute-example.xml
  M  slides/mongodb/aggr-op-skip-example.xml
  M  slides/mongodb/aggr-op-sort-example.xml
  M  slides/mongodb/aggr-op-sort-limit-skip-example.xml
  M  slides/mongodb/aggr-op-unwind-example.xml
  M  slides/mongodb/aggr-our-example-data.xml
  M  slides/mongodb/aggregation-example-cuisine6-sort.xml
  M  slides/mongodb/commands.xml
  A  slides/mongodb/excercise-finding-data.xml
  A  slides/mongodb/excercise-import-untappd.xml
  A  slides/mongodb/excercise-import-with-types.xml
  M  slides/mongodb/excercise02-distillers-example.xml
  M  slides/mongodb/excercise03-reviews-example.xml
  M  slides/mongodb/excercise04-reviews-aggr.xml
  M  slides/mongodb/half-tutorial-topics.xml
  A  slides/mongodb/types-php.xml
  M  slides/mongodb/types.xml
  M  slides/time/intervals.xml
  A  sql2nosql-ipc14s.xml
  A  sql2nosql-phptek14.xml
  A  time-phptek14.xml
diff_66295908554b148c04fe0420ceecfbafcaee2c5b.txt (text/plain, 44.2 KB)
diff --git a/mongo-tut-summercamp14.xml b/mongo-tut-summercamp14.xml
new file mode 100644
index 0000000..c3083cc
--- /dev/null
+++ b/mongo-tut-summercamp14.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>mongoDB</topic>
+<title>PHP and MongoDB</title>
+<event>PHP Summer Camp</event>
+<location>Rovinj, Croatia</location>
+<date>September 5th, 2014</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin></joindin>
+<slide>slides/mongodb/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+<slide>slides/mongodb/half-tutorial-topics.xml</slide>
+
+<slide>slides/mongodb/section-intro.xml</slide>
+<slide>slides/mongodb/collections-documents.xml</slide>
+<slide>slides/mongodb/document.xml</slide>
+
+<slide>slides/mongodb/connecting.xml</slide>
+
+<slide>slides/mongodb/insert-js.xml</slide>
+<slide>slides/mongodb/insert-php.xml</slide>
+<slide>slides/mongodb/insert-php-shortarray.xml</slide>
+- single
+
+<slide>slides/mongodb/id.xml</slide>
+
+<!-- FIRST EXCERCISE -->
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/excercise-import-untappd.xml</slide>
+
+<slide>slides/mongodb/query.xml</slide>
+<slide>slides/mongodb/query2.xml</slide>
+- findOne
+- find
+
+<slide>slides/mongodb/query-advanced-ops.xml</slide>
+
+<slide>slides/mongodb/cursors.xml</slide>
+- cursor
+<slide>slides/mongodb/limit-skip.xml</slide>
+- limit/skip
+
+<!-- SECOND EXCERCISE -->
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/excercise-finding-data.xml</slide>
+
+<slide>slides/mongodb/types.xml</slide>
+<slide>slides/mongodb/types-php.xml</slide>
+
+<!-- THIRD EXCERCISE -->
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/excercise-import-with-types.xml</slide>
+
+
+<slide>slides/mongodb/update2a.xml</slide>
+
+<!-- SCHEMA DESIGN -->
+<slide>slides/mongodb/section-schema-design.xml</slide>
+Common Patterns
+
+- RDBMS-normalisation.
+
+<slide>slides/mongodb/blog.xml</slide>
+<slide>slides/mongodb/blog2.xml</slide>
+
+<slide>slides/mongodb/considerations.xml</slide>
+
+
+<slide>slides/mongodb/one-to-many1.xml</slide>
+<slide>slides/mongodb/one-to-many2.xml</slide>
+<slide>slides/mongodb/tip-array-key.xml</slide>
+<slide>slides/mongodb/one-to-many4.xml</slide>
+
+<!-- SECOND EXCERCISE -->
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/excercise02-distillers-storage.xml</slide>
+<slide>slides/mongodb/excercise02-distillers-example.xml</slide>
+
+
+<slide>slides/mongodb/many-to-many1.xml</slide>
+<slide>slides/mongodb/many-to-many2.xml</slide>
+<slide>slides/mongodb/many-to-many3.xml</slide>
+<slide>slides/mongodb/many-to-many4.xml</slide>
+
+<slide>slides/mongodb/embed-vs-link.xml</slide>
+
+
+<!-- THIRD EXCERCISE -->
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/excercise03-reviews.xml</slide>
+<slide>slides/mongodb/excercise03-reviews-example.xml</slide>
+<slide>slides/mongodb/excercise03-push-to-add-review.xml</slide>
+<slide>slides/mongodb/excercise03-add-like.xml</slide>
+
+
+<!-- COMMANDS and AGGREGATION -->
+<slide>slides/mongodb/commands.xml</slide>
+
+<slide>slides/mongodb/section-aggregation.xml</slide>
+<slide>slides/mongodb/aggr-aggr-framework.xml</slide>
+
+<slide>slides/mongodb/aggr-pipeline.xml</slide>
+<slide>slides/mongodb/aggr-pipelines-ops.xml</slide>
+<slide>slides/mongodb/aggr-our-example-data.xml</slide>
+<slide>slides/mongodb/aggr-op-match.xml</slide>
+<slide>slides/mongodb/aggr-op-match-example.xml</slide>
+<slide>slides/mongodb/aggr-op-match-with-query-example.xml</slide>
+<slide>slides/mongodb/aggr-op-project.xml</slide>
+<slide>slides/mongodb/aggr-op-project-incl-excl-example.xml</slide>
+<slide>slides/mongodb/aggr-op-project-rename-compute-example.xml</slide>
+<slide>slides/mongodb/aggr-op-project-create-sub-example.xml</slide>
+<slide>slides/mongodb/aggr-op-group.xml</slide>
+<slide>slides/mongodb/aggr-op-group-sum-count-example.xml</slide>
+<slide>slides/mongodb/aggr-op-group-collect-example.xml</slide>
+<slide>slides/mongodb/aggr-op-group-compound-example.xml</slide>
+<slide>slides/mongodb/aggr-op-unwind.xml</slide>
+<slide>slides/mongodb/aggr-op-unwind-example.xml</slide>
+<slide>slides/mongodb/aggr-op-sort-skip-limit.xml</slide>
+<slide>slides/mongodb/aggr-op-sort-example.xml</slide>
+<slide>slides/mongodb/aggr-op-limit-example.xml</slide>
+<slide>slides/mongodb/aggr-op-skip-example.xml</slide>
+<slide>slides/mongodb/aggr-op-sort-limit-skip-example.xml</slide>
+
+<!-- FOURTH EXCERCISE -->
+<slide>slides/mongodb/aggregation-example-cuisine6-sort.xml</slide>
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/excercise04-reviews-aggr.xml</slide>
+
+<slide>slides/mongodb/questions.xml</slide>
+
+
+<!-- INDEXES -->
+<slide>slides/mongodb/section-indexes.xml</slide>
+
+<slide>slides/mongodb/idx-create-php.xml</slide>
+
+<slide>slides/mongodb/idx-cities-by-name-and-pop.xml</slide>
+<slide>slides/mongodb/idx-cities-by-name-and-pop2.xml</slide>
+<slide>slides/mongodb/idx-cities-by-name-and-pop3.xml</slide>
+<slide>slides/mongodb/idx-cities-by-pop-and-dem.xml</slide>
+<slide>slides/mongodb/idx-cities-by-pop-and-dem2.xml</slide>
+<slide>slides/mongodb/idx-stored2.xml</slide>
+<slide>slides/mongodb/idx-cities-by-pop-and-dem4.xml</slide>
+<slide>slides/mongodb/idx-cities-by-pop-and-dem6.xml</slide>
+<slide>slides/mongodb/idx-cities-by-pop-and-dem5.xml</slide>
+
+<slide>slides/mongodb/idx-recap1.xml</slide>
+<slide>slides/mongodb/idx-recap2.xml</slide>
+<slide>slides/mongodb/idx-recap3.xml</slide>
+
+<slide>slides/mongodb/idx-which-one-is-picked.xml</slide>
+<slide>slides/mongodb/questions.xml</slide>
+
+<!-- REPLICATION -->
+<slide>slides/mongodb/section-replication.xml</slide>
+<slide>slides/mongodb/repl-use-cases.xml</slide>
+<slide>slides/mongodb/repl-features.xml</slide>
+<slide>slides/mongodb/repl-works-basic.xml</slide>
+<slide>slides/mongodb/repl-works-normal.xml</slide>
+<slide>slides/mongodb/repl-works-failover.xml</slide>
+<slide>slides/mongodb/repl-oplog.xml</slide>
+
+<slide>slides/mongodb/replication-setup.xml</slide>
+
+<slide>slides/mongodb/repl-eventual-consistency.xml</slide>
+
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/mongodb/resources.xml</slide>
+</presentation>
diff --git a/slides/mongodb/aggr-op-group-collect-example.xml b/slides/mongodb/aggr-op-group-collect-example.xml
index 45d09bd..f2a2f7c 100644
--- a/slides/mongodb/aggr-op-group-collect-example.xml
+++ b/slides/mongodb/aggr-op-group-collect-example.xml
@@ -6,29 +6,22 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n388320891",
-  "tags" : {
-*    "amenity" : "restaurant",*
-*    "cuisine" : "chinese",*
-    "name" : "China GaGa"
-  }
-},
+    "_id" : ObjectId("5400a24f44670a01098b488f"),
+    "beer_name" : "Reveller",
+    "brewery_name" : "Orchard Pig",
+    "beer_type" : "Cider"
+}
 {
-  "_id" : "n388826644",
-  "tags" : {
-*    "amenity" : "restaurant",*
-*    "cuisine" : "japanese",*
-    "name" : "Oisi"
-  }
-},
+    "_id" : ObjectId("5400a24f44670a01098b4890"),
+    "beer_name" : "Hacker-Pschorr Hefe Weisse",
+    "brewery_name" : "Paulaner Gruppe",
+    "beer_type" : "Hefeweizen"
+}
 {
-  "_id" : "n389031406",
-  "tags" : {
-*    "amenity" : "pub",*
-*    "cuisine" : "tapas",*
-    "food" : "yes",
-    "name" : "Tonic"
-  }
+    "_id" : ObjectId("5400a24f44670a01098b4891"),
+    "beer_name" : "Hacker-Pschorr Münchener Gold",
+    "brewery_name" : "Paulaner Gruppe",
+    "beer_type" : "Dortmunder / Export Lager"
 }
 </example>
 </td>
@@ -38,24 +31,24 @@
 <td>
 <example inline="3">
 { $group: {
-*  _id: '$tags.amenity',*
-  cuisines: { *'$addToSet': '$tags.cuisine'* }
+*  _id: '$brewery_name',*
+  beers: { *'$addToSet': '$beer_name'* }
 } }
 </example>
 
 <example inline="3">
 {
-  "_id" : "pub",
-  "cuisines" : [
-    "tapas"
-  ]
-},
+    "_id" : "Paulaner Gruppe",
+    "beers" : [
+        "Hacker-Pschorr Münchener Gold",
+        "Hacker-Pschorr Hefe Weisse"
+    ]
+}
 {
-  "_id" : "restaurant",
-  "cuisines" : [
-    "japanese",
-    "chinese"
-  ]
+    "_id" : "Orchard Pig",
+    "beers" : [ 
+        "Reveller" 
+    ] 
 }
 </example>
 </td></tr></table>
diff --git a/slides/mongodb/aggr-op-group-compound-example.xml b/slides/mongodb/aggr-op-group-compound-example.xml
index 8a06430..5a2f65a 100644
--- a/slides/mongodb/aggr-op-group-compound-example.xml
+++ b/slides/mongodb/aggr-op-group-compound-example.xml
@@ -6,29 +6,29 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n322270228",
-  "tags" : {
-*    "amenity" : "restaurant",*
-*    "cuisine" : "italian",*
-    "name" : "Ristorante LA COLLINA",
-  }
-},
+    "beer_name" : "Sleigh Ride",
+    "beer_type" : "Cider",
+    "brewery_country" : "Wales"
+}
 {
-  "_id" : "n322270302",
-  "tags" : {
-*    "amenity" : "restaurant",*
-*    "cuisine" : "indian",*
-    "name" : "The Connoisseur",
-  }
-},
+    "beer_name" : "Tumbledown Mulled Cider",
+    "beer_type" : "Cider",
+    "brewery_country" : "Wales"
+}
 {
-  "_id" : "n322270304",
-  "tags" : {
-*    "amenity" : "restaurant",*
-*    "cuisine" : "italian",*
-    "deli" : "yes",
-    "name" : "Incanto",
-  }
+    "beer_name" : "Tumbledown Mulled Cider",
+    "beer_type" : "Cider",
+    "brewery_country" : "Wales"
+}
+{
+    "beer_name" : "Two Trees",
+    "beer_type" : "Perry",
+    "brewery_country" : "Wales"
+}
+{
+    "beer_name" : "Longdon Perry",
+    "beer_type" : "Perry",
+    "brewery_country" : "England"
 }
 </example>
 </td>
@@ -39,32 +39,25 @@
 <example inline="3">
 { $group: {
   _id: *{*
-*    'amenity' : '$tags.amenity',*
-*    'cuisine' : '$tags.cuisine'*
+*    'country' : '$brewery_country',*
+*    'type' : '$beer_type'*
 *  }*
-  names: { *'$addToSet': '$tags.name'* }
+  beers: { *'$addToSet': '$beer_name'* }
 } }
 </example>
 
 <example inline="3">
 {
-*  "_id" : {*
-*    "amenity" : "restaurant",*
-*    "cuisine" : "indian"*
-*  },*
-  "names" : [
-    "The Connoisseur"
-  ]
-},
+    "_id" : { "country" : "England", "type" : "Perry" },
+    "beers" : [ "Longdon Perry" ]
+}
+{
+    "_id" : { "country" : "Wales", "type" : "Cider" },
+    "beers" : [ "Tumbledown Mulled Cider", "Sleigh Ride" ]
+}
 {
-*  "_id" : {*
-*    "amenity" : "restaurant",*
-*    "cuisine" : "italian"*
-*  },*
-  "names" : [
-    "Incanto",
-    "Ristorante LA COLLINA"
-  ]
+    "_id" : { "country" : "Wales", "type" : "Perry" },
+    "beers" : [ "Two Trees" ]
 }
 </example>
 </td></tr></table>
diff --git a/slides/mongodb/aggr-op-group-sum-count-example.xml b/slides/mongodb/aggr-op-group-sum-count-example.xml
index fcdcd67..5f5c53e 100644
--- a/slides/mongodb/aggr-op-group-sum-count-example.xml
+++ b/slides/mongodb/aggr-op-group-sum-count-example.xml
@@ -6,30 +6,24 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n306036143",
-  "tags" : {
-*    "amenity" : "cafe",*
-    "cuisine" : "italian",
-    "name" : "Saponara"
-  }
-},
+    "_id" : ObjectId("5400a24f44670a01098b47b2"),
+    "beer_name" : "Floris Framboise",
+    "brewery_name" : "Brouwerij Huyghe"
+}
 {
-  "_id" : "n306042529",
-  "tags" : {
-*    "amenity" : "restaurant",*
-    "cuisine" : "asian",
-    "layer" : "2",
-    "name" : "Wagamama"
-  }
-},
+    "_id" : ObjectId("5400a24f44670a01098b47b3"),
+    "beer_name" : "Arabier",
+    "brewery_name" : "Brouwerij De Dolle Brouwers"
+}
 {
-  "_id" : "n306042546",
-  "tags" : {
-*    "amenity" : "restaurant",*
-    "cuisine" : "sushi",
-    "layer" : "2",
-    "name" : "Yo! Sushi"
-  }
+    "_id" : ObjectId("5400a24f44670a01098b47b4"),
+    "beer_name" : "La Trappe Dubbel",
+    "brewery_name" : "Bierbrouwerij De Koningshoeven"
+}
+{
+    "_id" : ObjectId("5400a24f44670a01098b47b6"),
+    "beer_name" : "Marks &amp; Spencer Belgian Winter Beer",
+    "brewery_name" : "Brouwerij Huyghe"
 }
 </example>
 </td>
@@ -39,18 +33,22 @@
 <td>
 <example inline="3">
 { $group: {
-*  _id: '$tags.amenity',*
+*  _id: '$brewery_name',*
   count: { *'$sum': 1* }
 } }
 </example>
 
 <example inline="3">
 {
-  "_id" : "restaurant",
+  "_id" : "Brouwerij Huyghe",
   "count" : 2
 },
 {
-  "_id" : "cafe",
+  "_id" : "Brouwerij De Dolle Brouwers",
+  "count" : 1
+},
+{
+  "_id" : "Bierbrouwerij De Koningshoeven",
   "count" : 1
 },
 </example>
diff --git a/slides/mongodb/aggr-op-limit-example.xml b/slides/mongodb/aggr-op-limit-example.xml
index 67c2302..2fc9b6e 100644
--- a/slides/mongodb/aggr-op-limit-example.xml
+++ b/slides/mongodb/aggr-op-limit-example.xml
@@ -5,15 +5,13 @@
 <tr>
 <td>
 <example inline="3">
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Yard" },
-{ "name" : "Le Sacré Coeur" },
-{ "name" : "Ask" },
-{ "name" : "Vigata" },
-{ "name" : "Sedir" },
-{ "name" : "Parveen" },
-{ "name" : "Mem &amp; Laz" },
-{ "name" : "Gallipoli" }
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Rallar Amber Ale" }
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Brixton Porter" }
 </example>
 </td>
 <td>
@@ -25,11 +23,11 @@
 </example>
 
 <example inline="3">
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Yard" },
-{ "name" : "Le Sacré Coeur" },
-{ "name" : "Ask" },
-{ "name" : "Vigata" },
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Rallar Amber Ale" }
+{ "beer_name" : "Beer Geek Breakfast" }
 </example>
 </td></tr></table>
 </slide>
diff --git a/slides/mongodb/aggr-op-match-example.xml b/slides/mongodb/aggr-op-match-example.xml
index fde5db4..2a6c3e1 100644
--- a/slides/mongodb/aggr-op-match-example.xml
+++ b/slides/mongodb/aggr-op-match-example.xml
@@ -6,28 +6,19 @@
 <td>
 <example inline="3">
 {
-  "_id" : "w42931536",
-  "tags" : {
-    "amenity" : "restaurant",
-*    "cuisine" : "french",*
-    "name" : "Le Comptoir Gascon",
-  }
+    "beer_name" : "Gentleman's Wit",
+    "brewery_name" : "Camden Town Brewery",
+    "beer_type" : "Witbier"
 }
 {
-  "_id" : "w50732182",
-  "tags" : {
-    "amenity" : "restaurant",
-*    "cuisine" : "burger",*
-    "name" : "Starving Marvin's",
-  }
+    "beer_name" : "Old Rascal",
+    "brewery_name" : "Thatchers",
+    *"beer_type" : "Cider"*
 }
 {
-  "_id" : "w58537927",
-  "tags" : {
-    "amenity" : "restaurant",
-*    "cuisine" : "chinese",*
-    "name" : "Royal Garden Restaurant"
-  }
+    "beer_name" : "Byron Lager",
+    *"brewery_name" : "Camden Town Brewery",
+    "beer_type" : "Euro Lager"
 }
 </example>
 </td>
@@ -38,19 +29,16 @@
 <example inline="3">
 {
 *  $match: {*
-*    "tags.cuisine": "chinese"*
+*    "beer_type": "Cider"*
 *  }*
 }
 </example>
 
 <example inline="3">
 {
-  "_id" : "w58537927",
-  "tags" : {
-    "building" : "yes",
-*    "cuisine" : "chinese",*
-    "name" : "Royal Garden Restaurant"
-  }
+    "beer_name" : "Old Rascal",
+    "brewery_name" : "Thatchers",
+    *"beer_type" : "Cider"*
 }
 </example>
 </td></tr></table>
diff --git a/slides/mongodb/aggr-op-match-with-query-example.xml b/slides/mongodb/aggr-op-match-with-query-example.xml
index 8d45523..cf6f6a3 100644
--- a/slides/mongodb/aggr-op-match-with-query-example.xml
+++ b/slides/mongodb/aggr-op-match-with-query-example.xml
@@ -6,30 +6,19 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n1240135999",
-  "tags" : {
-    "amenity" : "restaurant",
-    "cuisine" : "thai",
-    "name" : "Addie's Thai"
-  }
+    "beer_name" : "Premium Organic Cider",
+    "brewery_name" : "Dunkertons",
+    *"beer_abv" : 6.8*
 }
 {
-  "_id" : "n1242469688",
-  "tags" : {
-*    "addr:postcode" : "CR6 9EG",*
-    "addr:street" : "Farleigh Road",
-    "amenity" : "restaurant",
-    "cuisine" : "regional",
-    "name" : "The Horseshoe"
-  }
+    "beer_name" : "Belgian White",
+    "brewery_name" : "Blue Moon Brewing Company",
+    "beer_abv" : 5.4
 }
 {
-  "_id" : "n1242549289",
-  "tags" : {
-    "amenity" : "restaurant",
-    "cuisine" : "ethiopian",
-    "name" : "Queen of Sheba"
-  }
+    "beer_name" : "Premium Cloudy Cider",
+    "brewery_name" : "Addlestones (C&amp;C Group plc)",
+    "beer_abv" : 5.2
 }
 </example>
 </td>
@@ -39,20 +28,15 @@
 <td>
 <example inline="3">
 {  $match: {
-*  "tags.addr:postcode": { $exists: true }*
+*  "beer_abv": { $gte: 6 }*
 } }
 </example>
 
 <example inline="3">
 {
-  "_id" : "n1242469688",
-  "tags" : {
-*    "addr:postcode" : "CR6 9EG",*
-    "addr:street" : "Farleigh Road",
-    "amenity" : "restaurant",
-    "cuisine" : "regional",
-    "name" : "The Horseshoe"
-  }
+    "beer_name" : "Premium Organic Cider",
+    "brewery_name" : "Dunkertons",
+    *"beer_abv" : 6.8*
 }
 </example>
 </td></tr></table>
diff --git a/slides/mongodb/aggr-op-project-create-sub-example.xml b/slides/mongodb/aggr-op-project-create-sub-example.xml
index f5a157b..57eed76 100644
--- a/slides/mongodb/aggr-op-project-create-sub-example.xml
+++ b/slides/mongodb/aggr-op-project-create-sub-example.xml
@@ -6,21 +6,12 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n691721239",
-  "type" : NumberLong(1),
-  "loc" : [
-    -0.135621,
-    51.515325
-  ],
-  "tags" : {
-    "addr:city" : "London",
-    "addr:country" : "GB",
-    "addr:housenumber" : "187b",
-    "addr:street" : "Wardour Street",
-    "amenity" : "restaurant",
-    "cuisine" : "korean",
-    "name" : "Red Devil"
-  }
+    "beer_name" : "Crazy Goat",
+    "brewery_name" : "Lilleys Cider Barn",
+    "beer_type" : "Cider",
+    "beer_abv" : 6.8,
+    "beer_ibu" : 0,
+    "brewery_country" : "England"
 }
 </example>
 </td>
@@ -30,27 +21,22 @@
 <td>
 <example inline="3">
 { $project: {
-  *name:    '$tags.name',*
-  cuisine: '$tags.cuisine',
-*  address: {*
-*    nr:     '$tags.addr:housenumber',*
-*    street: '$tags.addr:street',*
-*    city:   '$tags.addr:city'*
+  *name:    '$beer_name',*
+*  brewery: {*
+*    name:    '$brewery_name',*
+*    country: '$brewery_country',*
 *  }*
 } }
 </example>
 
 <example inline="3">
-    {
-      "_id" : "n691721239",
-      *"name" : "Red Devil",*
-      "cuisine" : "korean",
-*      "address" : {*
-*        "nr" : "187b",*
-*        "street" : "Wardour Street",*
-*        "city" : "London"*
-*      }*
+{
+    "name": "Crazy Goat",
+    "brewery": {
+        "name": "Lilleys Cider Barn",
+        "country": "England",
     }
+}
 </example>
 </td></tr></table>
 </slide>
diff --git a/slides/mongodb/aggr-op-project-incl-excl-example.xml b/slides/mongodb/aggr-op-project-incl-excl-example.xml
index 4fb3716..7138c7b 100644
--- a/slides/mongodb/aggr-op-project-incl-excl-example.xml
+++ b/slides/mongodb/aggr-op-project-incl-excl-example.xml
@@ -6,18 +6,15 @@
 <td>
 <example inline="3">
 {
-*  "_id" : "n47733711",*
-  "type" : NumberLong(1),
-  "loc" : [
-    0.2344868,
-    51.5938555
-  ],
-*  "tags" : {*
-*    "amenity" : "fast_food",*
-*    "cuisine" : "fish_and_chips",*
-*    "name" : "The Frying Pan"*
-*  }*
-},
+    "_id" : ObjectId("5400a24f44670a01098b4657"),
+    "beer_name" : "Honey's Midford Cider",
+    *"brewery_name" : "Honey And Daughters",*
+    *"beer_type" : "Cider",*
+    "beer_abv" : 6.5,
+    "beer_ibu" : 0,
+    "rating_score" : 4,
+    "brewery_country" : "England"
+}
 </example>
 </td>
 <td>
@@ -26,18 +23,19 @@
 <td>
 <example inline="3">
 {
-*    $project: { _id: 0, tags: 1 }*
+    *$project: {*
+        *_id: 0,*
+        *beer_name: 1,*
+        *brewery_name: 1*
+    *}*
 }
 </example>
 
 <example inline="3">
 {
-*  "tags" : {*
-*    "amenity" : "fast_food",*
-*    "cuisine" : "fish_and_chips",*
-*    "name" : "The Frying Pan"*
-*  }*
-},
+    "beer_name" : "Honey's Midford Cider",
+    "brewery_name" : "Honey And Daughters",
+}
 </example>
 </td></tr></table>
 </slide>
diff --git a/slides/mongodb/aggr-op-project-rename-compute-example.xml b/slides/mongodb/aggr-op-project-rename-compute-example.xml
index 6c4292d..2473429 100644
--- a/slides/mongodb/aggr-op-project-rename-compute-example.xml
+++ b/slides/mongodb/aggr-op-project-rename-compute-example.xml
@@ -6,20 +6,13 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n375475617",
-  "type" : NumberLong(1),
-  "loc" : [
-    -0.1502324,
-    51.4440935
-  ],
-*  "tags"* : {
-    "addr:housenumber" : "37",
-    "addr:street" : "Bedford Hill",
-    "amenity" : "restaurant",
-    "cuisine" : "greek",
-    "name" : "Meze Kitchen"
-  }
-},
+    "beer_name" : "Crazy Goat",
+    "brewery_name" : "Lilleys Cider Barn",
+    "beer_type" : "Cider",
+    "beer_abv" : 6.8,
+    "beer_ibu" : 0,
+    "brewery_country" : "England"
+}
 </example>
 </td>
 <td>
@@ -28,26 +21,21 @@
 <td>
 <example inline="3">
 { $project: {
-  address: { *$concat: [*
-*    '$tags.addr:housenumber',*
-*    ' ',*
-*    '$tags.addr:street'*
+  beer: { *$concat: [*
+*    '$beer_name',*
+*    ' (',*
+*    '$beer_type'*
+*    ')',*
 *  ]* },
-  'desc': *'$tags'*
+  'country': *'$brewery_country'*
 } }
 </example>
 
 <example inline="3">
 {
-  "_id" : "n375475617",
-*  "address" : "37 Bedford Hill",*
-*  "desc"* : {
-    "addr:housenumber" : "37",
-    "addr:street" : "Bedford Hill",
-    "amenity" : "restaurant",
-    "cuisine" : "greek",
-    "name" : "Meze Kitchen"
-  }
+    "_id" : ObjectId("5400a24f44670a01098b4657"),
+    "beer" : "Grazy Goat (Cider)",
+    "country" : "England"
 },
 </example>
 </td></tr></table>
diff --git a/slides/mongodb/aggr-op-skip-example.xml b/slides/mongodb/aggr-op-skip-example.xml
index ff31e1b..ec882e0 100644
--- a/slides/mongodb/aggr-op-skip-example.xml
+++ b/slides/mongodb/aggr-op-skip-example.xml
@@ -5,15 +5,13 @@
 <tr>
 <td>
 <example inline="3">
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Yard" },
-{ "name" : "Le Sacré Coeur" },
-{ "name" : "Ask" },
-{ "name" : "Vigata" },
-{ "name" : "Sedir" },
-{ "name" : "Parveen" },
-{ "name" : "Mem &amp; Laz" },
-{ "name" : "Gallipoli" }
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Rallar Amber Ale" }
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Brixton Porter" }
 </example>
 </td>
 <td>
@@ -21,16 +19,15 @@
 </td>
 <td>
 <example inline="3">
-*{ $skip : 3 }*
+*{ $skip : 2 }*
 </example>
 
 <example inline="3">
-{ "name" : "Ask" },
-{ "name" : "Vigata" },
-{ "name" : "Sedir" },
-{ "name" : "Parveen" },
-{ "name" : "Mem &amp; Laz" },
-{ "name" : "Gallipoli" }
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Rallar Amber Ale" }
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Brixton Porter" }
 </example>
 </td></tr></table>
 </slide>
diff --git a/slides/mongodb/aggr-op-sort-example.xml b/slides/mongodb/aggr-op-sort-example.xml
index 9de7dce..8fc9f13 100644
--- a/slides/mongodb/aggr-op-sort-example.xml
+++ b/slides/mongodb/aggr-op-sort-example.xml
@@ -5,15 +5,13 @@
 <tr>
 <td>
 <example inline="3">
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Yard" },
-{ "name" : "Le Sacré Coeur" },
-{ "name" : "Ask" },
-{ "name" : "Vigata" },
-{ "name" : "Sedir" },
-{ "name" : "Parveen" },
-{ "name" : "Mem &amp; Laz" },
-{ "name" : "Gallipoli" }
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Rallar Amber Ale" }
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Brixton Porter" }
 </example>
 </td>
 <td>
@@ -22,20 +20,18 @@
 <td>
 <example inline="3">
 { $sort: {
-*  name: 1*
+*  beer_name: 1*
 } }
 </example>
 
 <example inline="3">
-{ "name" : "Ask" },
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Gallipoli" }
-{ "name" : "Le Sacré Coeur" },
-{ "name" : "Mem &amp; Laz" },
-{ "name" : "Parveen" },
-{ "name" : "Sedir" },
-{ "name" : "Vigata" },
-{ "name" : "Yard" },
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Brixton Porter" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+{ "beer_name" : "Rallar Amber Ale" }
 </example>
 </td></tr></table>
 </slide>
diff --git a/slides/mongodb/aggr-op-sort-limit-skip-example.xml b/slides/mongodb/aggr-op-sort-limit-skip-example.xml
index da89de1..1ed329f 100644
--- a/slides/mongodb/aggr-op-sort-limit-skip-example.xml
+++ b/slides/mongodb/aggr-op-sort-limit-skip-example.xml
@@ -5,15 +5,13 @@
 <tr>
 <td>
 <example inline="3">
-*{ "name" : "Blues Restaurant &amp; Bar" },*
-*{ "name" : "Yard" },*
-*{ "name" : "Le Sacré Coeur" },*
-*{ "name" : "Ask" },*
-{ "name" : "Vigata" },
-{ "name" : "Sedir" },
-{ "name" : "Parveen" },
-{ "name" : "Mem &amp; Laz" },
-{ "name" : "Gallipoli" }
+*{ "beer_name" : "Old Engine Oil" }*
+*{ "beer_name" : "Pilsner" }*
+*{ "beer_name" : "Du Monde Blanc" }*
+*{ "beer_name" : "Rallar Amber Ale" }*
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Brixton Porter" }
 </example>
 </td>
 <td>
@@ -23,15 +21,15 @@
 <example inline="3">
 [
 *  { $limit : 4 },*
-*  { $sort : { name: 1 } }*
+*  { $sort : { beer_name: 1 } }*
 ]
 </example>
 
 <example inline="3">
-{ "name" : "Ask" },
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Le Sacré Coeur" },
-{ "name" : "Yard" },
+{ "beer_name" : "Du Monde Blanc" }
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+{ "beer_name" : "Rallar Amber Ale" }
 </example>
 </td></tr></table>
 <break />
@@ -40,15 +38,13 @@
 <tr>
 <td>
 <example inline="3">
-*{ "name" : "Blues Restaurant &amp; Bar" },*
-{ "name" : "Yard" },
-*{ "name" : "Le Sacré Coeur" },*
-*{ "name" : "Ask" },*
-{ "name" : "Vigata" },
-{ "name" : "Sedir" },
-{ "name" : "Parveen" },
-{ "name" : "Mem &amp; Laz" },
-*{ "name" : "Gallipoli" }*
+{ "beer_name" : "Old Engine Oil" }
+{ "beer_name" : "Pilsner" }
+*{ "beer_name" : "Du Monde Blanc" }*
+{ "beer_name" : "Rallar Amber Ale" }
+*{ "beer_name" : "Beer Geek Breakfast" }*
+*{ "beer_name" : "Dirty Bastard" }*
+*{ "beer_name" : "Brixton Porter" }*
 </example>
 </td>
 <td>
@@ -57,16 +53,16 @@
 <td>
 <example inline="3">
 [
-*  { $sort : { name: 1 } },*
+*  { $sort : { beer_name: 1 } },*
 *  { $limit : 4 }*
 ]
 </example>
 
 <example inline="3">
-{ "name" : "Ask" },
-{ "name" : "Blues Restaurant &amp; Bar" },
-{ "name" : "Gallipoli" }
-{ "name" : "Le Sacré Coeur" },
+{ "beer_name" : "Beer Geek Breakfast" }
+{ "beer_name" : "Brixton Porter" }
+{ "beer_name" : "Dirty Bastard" }
+{ "beer_name" : "Du Monde Blanc" }
 </example>
 </td></tr></table>
 
diff --git a/slides/mongodb/aggr-op-unwind-example.xml b/slides/mongodb/aggr-op-unwind-example.xml
index 708558e..33a6a3a 100644
--- a/slides/mongodb/aggr-op-unwind-example.xml
+++ b/slides/mongodb/aggr-op-unwind-example.xml
@@ -6,18 +6,21 @@
 <td>
 <example inline="3">
 {
-  "_id" : "n476033502",
-  "type" : NumberLong(1),
-*  "tags" : [*
-*    "addr:housenumber=125",*
-*    "addr:street=Alban Gate",*
-*    "amenity=restaurant",*
-*    "cuisine=pizza",*
-*    "level=1",*
-*    "name=Pizza Express",*
-*    "phone=020 7600 8880",*
-*    "postcode=EC2Y 5AS"*
-*  ]*
+    "_id" : "Denmark",
+    "beers" : [
+        "Mochaccino Messiah",
+        "Texas Ranger",
+        "Tipsy Gypsy",
+        "Carlsberg",
+        "Black Ball",
+        "Final Frontier DIPA",
+        "Imperial Stout",
+        "Svaneke Choko Stout",
+        "Henrik Kaffesort",
+        "Hibernate",
+        "Pop Loves",
+        "Beer Geek Breakfast"
+    ]
 }
 </example>
 </td>
@@ -27,32 +30,23 @@
 <td>
 <example inline="3">
 {
-*  $unwind: '$tags'*
+*  $unwind: '$beers'*
 }
 </example>
 
 <example inline="3">
-{
-  "_id" : "n476033502",
-  "type" : NumberLong(1),
-*  "tags" : "addr:housenumber=125"*
-},
-{
-  "_id" : "n476033502",
-  "type" : NumberLong(1),
-*  "tags" : "addr:street=Alban Gate"*
-},
-{
-  "_id" : "n476033502",
-  "type" : NumberLong(1),
-*  "tags" : "amenity=restaurant"*
-},
-{
-  "_id" : "n476033502",
-  "type" : NumberLong(1),
-*  "tags" : "cuisine=pizza"*
-},
-…
+{ "_id" : "Denmark", "beers" : "Mochaccino Messiah" }
+{ "_id" : "Denmark", "beers" : "Texas Ranger" }
+{ "_id" : "Denmark", "beers" : "Tipsy Gypsy" }
+{ "_id" : "Denmark", "beers" : "Carlsberg" }
+{ "_id" : "Denmark", "beers" : "Black Ball" }
+{ "_id" : "Denmark", "beers" : "Final Frontier DIPA" }
+{ "_id" : "Denmark", "beers" : "Imperial Stout" }
+{ "_id" : "Denmark", "beers" : "Svaneke Choko Stout" }
+{ "_id" : "Denmark", "beers" : "Henrik Kaffesort" }
+{ "_id" : "Denmark", "beers" : "Hibernate" }
+{ "_id" : "Denmark", "beers" : "Pop Loves" }
+{ "_id" : "Denmark", "beers" : "Beer Geek Breakfast" }
 </example>
 </td></tr></table>
 </slide>
diff --git a/slides/mongodb/aggr-our-example-data.xml b/slides/mongodb/aggr-our-example-data.xml
index 57fce13..cea432e 100644
--- a/slides/mongodb/aggr-our-example-data.xml
+++ b/slides/mongodb/aggr-our-example-data.xml
@@ -3,15 +3,24 @@
 
 <example>
 {
-	"_id" : "w94069675",
-	"tags" : {
-		"addr:housenumber" : "64",
-		"addr:street" : "Borough High Street",
-		"amenity" : "restaurant",
-		"building" : "yes",
-		"cuisine" : "indian",
-		"name" : "Truly Indian"
-	},
+	"_id" : ObjectId("5400a24f44670a01098b491d"),
+	"beer_name" : "Aurora Australis",
+	"brewery_name" : "Bridge Road Brewers",
+	"beer_type" : "Belgian Quad",
+	"beer_abv" : 11,
+	"beer_ibu" : 30,
+	"comment" : "Red wine flavours. Brewed in Australia but packaged in Norway.",
+	"venue_name" : "Olympen",
+	"venue_city" : "Oslo",
+	"venue_state" : "Oslo",
+	"venue_lat" : 59.9121,
+	"venue_lng" : 10.7643,
+	"rating_score" : 4.5,
+	"created_at" : ISODate("2014-07-06T20:38:17Z"),
+	"checkin_url" : "https://untappd.com/c/97860912",
+	"beer_url" : "https://untappd.com/beer/300283",
+	"brewery_url" : "https://untappd.com/brewery/3174",
+	"brewery_country" : "Australia"
 }
 </example>
 </slide>
diff --git a/slides/mongodb/aggregation-example-cuisine6-sort.xml b/slides/mongodb/aggregation-example-cuisine6-sort.xml
index a6be84c..08a4673 100644
--- a/slides/mongodb/aggregation-example-cuisine6-sort.xml
+++ b/slides/mongodb/aggregation-example-cuisine6-sort.xml
@@ -1,19 +1,22 @@
 <slide>
 <title>Aggregation example</title>
 
-<example result="3"><![CDATA[<?php
+<blurb>Find 10 venues with the most distinct beers</blurb>
+<example result="1"><![CDATA[<?php
 $m = new MongoClient();
 
-$res = $m->demo->poiConcat->aggregate( [
-    [ '$match' => [ 'ts' => new MongoRegex( '/^cuisine=/' ) ] ],
-    [ '$unwind' => '$ts' ],
-    [ '$match' => [ 'ts' => new MongoRegex( '/^cuisine=/' ) ] ],
-    [ '$group' => [ '_id' => '$ts', 'count' => [ '$sum' => 1 ] ] ],
-    /* and at last we sort by count */
+$res = $m->tutorial->beer->aggregate( [
+    [ '$match' => [ 'venue_name' => [ '$ne' => null ] ] ],
+    [ '$group' => [ '_id' => [ 'venue' => '$venue_name', 'beer' => '$beer_name' ] ] ], 
+    [ '$group' => [ '_id' => '$_id.venue', count => [ '$sum' => 1 ] ] ], 
     [ '$sort' => [ 'count' => -1 ] ],
+    [ '$limit' => 10 ],
 ] );
 
-var_dump( $res['result'] );
+foreach ( $res['result'] as $result )
+{
+    echo $result['_id'], ': ', $result['count'], "\n";
+}
 ?>]]>
 </example>
 </slide>
diff --git a/slides/mongodb/commands.xml b/slides/mongodb/commands.xml
index db43ef0..dbf91d0 100644
--- a/slides/mongodb/commands.xml
+++ b/slides/mongodb/commands.xml
@@ -3,8 +3,8 @@
 
 <list>
 	<bullet>Are run on the database</bullet>
-	<bullet>Do not (yet) return a cursor</bullet>
-	<bullet>Return one document</bullet>
-	<bullet>Some commands have helpers in the drivers and shell</bullet>
+	<bullet>Some (aggregation) return a cursor</bullet>
+	<bullet>Others return one document</bullet>
+	<bullet>Some commands have helpers in the drivers and shell, most don't</bullet>
 </list>
 </slide>
diff --git a/slides/mongodb/excercise-finding-data.xml b/slides/mongodb/excercise-finding-data.xml
new file mode 100644
index 0000000..0e031b4
--- /dev/null
+++ b/slides/mongodb/excercise-finding-data.xml
@@ -0,0 +1,12 @@
+<slide>
+<title>Excercise: querying</title>
+
+<div>Write a script that:</div>
+
+<list>
+	<bullet>Outputs the *date* date of the first "check-in" for *USA Hells*</bullet>
+	<bullet>List all *beer names* (with rating and date), where the beer has a
+	rating of *4.5 or higher*, ordered first by rating (highest first), and second by
+	date (earliest first).</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/excercise-import-untappd.xml b/slides/mongodb/excercise-import-untappd.xml
new file mode 100644
index 0000000..4e973b8
--- /dev/null
+++ b/slides/mongodb/excercise-import-untappd.xml
@@ -0,0 +1,16 @@
+<slide>
+<title>Excercise: Import Beer</title>
+
+<list>
+	<bullet>%git clone https://github.com/derickr/mongo-tutorial.git%</bullet>
+	<bullet>We will use beer ratings and types for examples</bullet>
+	<bullet>%untappd.json% has one JSON document per line</bullet>
+	<bullet>Write a script to import each beer into the *tutorial* database and the *beer* collection</bullet>
+	<bullet>Verify the result on the mongo shell:
+<example>
+mongo tutorial
+db.beer.count();
+</example>
+	</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/excercise-import-with-types.xml b/slides/mongodb/excercise-import-with-types.xml
new file mode 100644
index 0000000..c339e47
--- /dev/null
+++ b/slides/mongodb/excercise-import-with-types.xml
@@ -0,0 +1,11 @@
+<slide>
+<title>Excercise: import with types</title>
+
+<div>Update the import script to use types</div>
+
+<list>
+	<bullet>Import %beer_abv%, %beer_ibu%, %venue_lat%, %venue_lng% and %rating_score% as float.</bullet>
+	<bullet>Import %created_at% as %MongoDate% object</bullet>
+	<bullet>Fix the finding script</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/excercise02-distillers-example.xml b/slides/mongodb/excercise02-distillers-example.xml
index daafea6..b37aae3 100644
--- a/slides/mongodb/excercise02-distillers-example.xml
+++ b/slides/mongodb/excercise02-distillers-example.xml
@@ -4,7 +4,7 @@
 <div effect="fade-out">
 <blurb>Collection: distillery</blurb>
 <example><![CDATA[{
-	name: "Glenfiddch",
+	name: "Glenfiddich",
 	country: "Scotland",
 	region: "Speyside",
 	opening_year: 1887,
@@ -12,7 +12,7 @@
 }]]></example>
 <blurb>Collection: whisky</blurb>
 <example><![CDATA[{
-	name: "Glenfiddch 15",
+	name: "Glenfiddich 15",
 	age: 15,
 	strength: 50.3
 }]]></example>
@@ -21,14 +21,14 @@
 <div effect="fade-in">
 <blurb>Collection: distillery</blurb>
 <example><![CDATA[{
-	name: "Glenfiddch",
+	name: "Glenfiddich",
 	country: "Scotland",
 	region: "Speyside",
 	opening_year: 1887
 }]]></example>
 <blurb>Collection: whisky</blurb>
 <example><![CDATA[{
-	name: "Glenfiddch 15",
+	name: "Glenfiddich 15",
 	age: 15,
 	strength: 50.3,
 	distillery: "Glenfiddich"
diff --git a/slides/mongodb/excercise03-reviews-example.xml b/slides/mongodb/excercise03-reviews-example.xml
index 22ae959..ab03899 100644
--- a/slides/mongodb/excercise03-reviews-example.xml
+++ b/slides/mongodb/excercise03-reviews-example.xml
@@ -4,7 +4,7 @@
 <div effect="fade-out">
 <blurb>Collection: whisky</blurb>
 <example><![CDATA[{
-    name: "Glenfiddch 15",
+    name: "Glenfiddich 15",
     age: 15,
     strength: 50.3,
 }]]></example>
diff --git a/slides/mongodb/excercise04-reviews-aggr.xml b/slides/mongodb/excercise04-reviews-aggr.xml
index 353a054..e7cbfda 100644
--- a/slides/mongodb/excercise04-reviews-aggr.xml
+++ b/slides/mongodb/excercise04-reviews-aggr.xml
@@ -1,35 +1,12 @@
 <slide>
 <title>Excercise: Aggregation</title>
 
-<blurb>http://pastebin.com/rzYUULs2</blurb>
+<blurb>Write a script that uses the Aggregation Framework to:</blurb>
 
-<div effect="fade-out">
-<example><![CDATA[{
-    name: "Glenfiddich 15",
-    notes: [
-        {
-            user_name: "Derick", likes: 17, rating: 3.5,
-            note: "Caramel and honey, fruity with some hints of earth",
-        },
-        {
-            user_name: "Michael", likes: 9, rating: 3,
-            note: "Fruity and oaky",
-        }
-    ]
-},
-{
-    name: "Lagavullin 16",
-    notes: [
-        {
-            user_name: "Michael", likes: 7, rating: 4.5,
-            note: "Earty and full of nice peat smoke",
-        },
-    ]
-}]]></example>
-</div>
-
-<div effect="fade-in">
-<blurb>Write a script that uses the Aggregation Framework to list all review for a user
-sorted on rating</blurb>
-</div>
+<list>
+    <bullet>List the average %rating_score% per %beer_type%</bullet>
+    <bullet>Only include types if there are more than 5 ratings</bullet>
+    <bullet>Sort by highest rated type</bullet>
+    <bullet>Show only the top 8</bullet>
+</list>
 </slide>
diff --git a/slides/mongodb/half-tutorial-topics.xml b/slides/mongodb/half-tutorial-topics.xml
index 3630d13..bae624d 100644
--- a/slides/mongodb/half-tutorial-topics.xml
+++ b/slides/mongodb/half-tutorial-topics.xml
@@ -5,7 +5,7 @@
 	<bullet>Introduction into MongoDB with PHP</bullet>
 	<bullet>Schema Design</bullet>
 	<bullet>Indexes</bullet>
-	<bullet>Practical Example of Schema Design and Indexes</bullet>
+	<bullet>Introduction to Replication</bullet>
 	<bullet>Questions and Answers</bullet>
 </list>
 </slide>
diff --git a/slides/mongodb/types-php.xml b/slides/mongodb/types-php.xml
new file mode 100644
index 0000000..b47169e
--- /dev/null
+++ b/slides/mongodb/types-php.xml
@@ -0,0 +1,10 @@
+<slide>
+<title>MongoDB types and PHP</title>
+
+<list>
+	<bullet>Unlike PHP, MongoDB does not type juggle</bullet>
+	<bullet>There is a date type, but it's UTC only (MongoDate)</bullet>
+	<bullet>When reading, everything will be an (associative) array, but never
+	an object</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/types.xml b/slides/mongodb/types.xml
index 6279a63..ae3c312 100644
--- a/slides/mongodb/types.xml
+++ b/slides/mongodb/types.xml
@@ -1,5 +1,5 @@
 <slide>
-<title>mongoDB supports many types</title>
+<title>MongoDB supports many types</title>
 
 <list>
 	<bullet>null</bullet>
diff --git a/slides/time/intervals.xml b/slides/time/intervals.xml
index 3711820..a57b1a4 100644
--- a/slides/time/intervals.xml
+++ b/slides/time/intervals.xml
@@ -12,7 +12,7 @@ $i = new DateInterval( 'P3DT6H' );
 
 // from a difference
 $d1 = new DateTimeImmutable();
-$d2 = new DateTimeImmutable( "2013-08-13 19:30 Europe/London" );
+$d2 = new DateTimeImmutable( "2014-06-20 11:45 Europe/London" );
 $i = $d1->diff( $d2 );
 
 // displaying the difference
diff --git a/sql2nosql-ipc14s.xml b/sql2nosql-ipc14s.xml
new file mode 100644
index 0000000..2ad79de
--- /dev/null
+++ b/sql2nosql-ipc14s.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>mongoDB</topic>
+<title>From SQL to NoSQL</title>
+<event>IPC Spring</event>
+<location>Berlin, Germany</location>
+<date>Jun 2nd, 2014</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin></joindin>
+<slide>slides/mongodb/title.xml</slide>
+
+<!-- DINOSAUR vs PLATIPUS -->
+<slide>slides/mongodb/relational-model.xml</slide>
+<slide>slides/mongodb/dinosaur.xml</slide>
+<slide>slides/mongodb/normal-form.xml</slide>
+<slide>slides/mongodb/normal-form1.xml</slide>
+<slide>slides/mongodb/normal-form2.xml</slide>
+<slide>slides/mongodb/normal-form3.xml</slide>
+
+<!-- DIFFERENT NoSQL -->
+<slide>slides/mongodb/nosql.xml</slide>
+<slide>slides/mongodb/nosql-kv.xml</slide>
+<slide>slides/mongodb/nosql-column.xml</slide>
+<slide>slides/mongodb/nosql-graph.xml</slide>
+<slide>slides/mongodb/nosql-document.xml</slide>
+<slide>slides/mongodb/platipus.xml</slide>
+
+<!-- ACID vs CAP -->
+<slide>slides/mongodb/acid.xml</slide>
+<slide>slides/mongodb/cap.xml</slide>
+
+<!-- A FEW NOTES ON MONGODB -->
+<slide>slides/mongodb/databasefield.xml</slide>
+<slide>slides/mongodb/collections-documents.xml</slide>
+<slide>slides/mongodb/document.xml</slide>
+<slide>slides/mongodb/mongodb-1nf.xml</slide>
+<slide>slides/mongodb/mongodb-3nf.xml</slide>
+<slide>slides/mongodb/insert-intro.xml</slide>
+<slide>slides/mongodb/query-side-by-side.xml</slide>
+<slide>slides/mongodb/update-intro.xml</slide>
+<slide>slides/mongodb/update-atomicity.xml</slide>
+<slide>slides/mongodb/update-consistency.xml</slide>
+
+<slide>slides/mongodb/arbitrary-keys1.xml</slide>
+<slide>slides/mongodb/one-to-many2.xml</slide>
+<slide>slides/mongodb/one-to-many4.xml</slide>
+
+<!-- REPLICATION -->
+<slide>slides/mongodb/availability.xml</slide>
+<slide>slides/mongodb/repl-features.xml</slide>
+<slide>slides/mongodb/repl-works-normal.xml</slide>
+
+<slide>slides/mongodb/repl-eventual-consistency.xml</slide>
+
+<slide>slides/mongodb/sql2nosql-conclusion.xml</slide>
+<slide>slides/mongodb/resources.xml</slide>
+
+</presentation>
diff --git a/sql2nosql-phptek14.xml b/sql2nosql-phptek14.xml
new file mode 100644
index 0000000..d1e62c9
--- /dev/null
+++ b/sql2nosql-phptek14.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>mongoDB</topic>
+<title>From SQL to NoSQL</title>
+<event>php[tek] 2014</event>
+<location>Rosemont, IL, US</location>
+<date>May 22nd, 2014</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin>https://joind.in/10640</joindin>
+<slide>slides/mongodb/title.xml</slide>
+
+<!-- DINOSAUR vs PLATIPUS -->
+<slide>slides/mongodb/relational-model.xml</slide>
+<slide>slides/mongodb/dinosaur.xml</slide>
+<slide>slides/mongodb/normal-form.xml</slide>
+<slide>slides/mongodb/normal-form1.xml</slide>
+<slide>slides/mongodb/normal-form2.xml</slide>
+<slide>slides/mongodb/normal-form3.xml</slide>
+
+<!-- DIFFERENT NoSQL -->
+<slide>slides/mongodb/nosql.xml</slide>
+<slide>slides/mongodb/nosql-kv.xml</slide>
+<slide>slides/mongodb/nosql-column.xml</slide>
+<slide>slides/mongodb/nosql-graph.xml</slide>
+<slide>slides/mongodb/nosql-document.xml</slide>
+<slide>slides/mongodb/platipus.xml</slide>
+
+<!-- ACID vs CAP -->
+<slide>slides/mongodb/acid.xml</slide>
+<slide>slides/mongodb/cap.xml</slide>
+
+<!-- A FEW NOTES ON MONGODB -->
+<slide>slides/mongodb/databasefield.xml</slide>
+<slide>slides/mongodb/collections-documents.xml</slide>
+<slide>slides/mongodb/document.xml</slide>
+<slide>slides/mongodb/mongodb-1nf.xml</slide>
+<slide>slides/mongodb/mongodb-3nf.xml</slide>
+<slide>slides/mongodb/insert-intro.xml</slide>
+<slide>slides/mongodb/query-side-by-side.xml</slide>
+<slide>slides/mongodb/update-intro.xml</slide>
+<slide>slides/mongodb/update-atomicity.xml</slide>
+<slide>slides/mongodb/update-consistency.xml</slide>
+
+<slide>slides/mongodb/arbitrary-keys1.xml</slide>
+<slide>slides/mongodb/one-to-many2.xml</slide>
+<slide>slides/mongodb/one-to-many4.xml</slide>
+
+<!-- REPLICATION -->
+<slide>slides/mongodb/availability.xml</slide>
+<slide>slides/mongodb/repl-features.xml</slide>
+<slide>slides/mongodb/repl-works-normal.xml</slide>
+
+<slide>slides/mongodb/repl-eventual-consistency.xml</slide>
+
+<slide>slides/mongodb/sql2nosql-conclusion.xml</slide>
+<slide>slides/mongodb/resources.xml</slide>
+
+</presentation>
diff --git a/time-phptek14.xml b/time-phptek14.xml
new file mode 100644
index 0000000..c1ce13a
--- /dev/null
+++ b/time-phptek14.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>Localization and Internationalization</topic>
+<title>Advanced Date/Time Handling</title>
+<event>php[tek] 2014</event>
+<location>Rosemont, IL, USA</location>
+<date>May 21st, 2014</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin>http://joind.in/10617</joindin>
+<twitter>derickr</twitter>
+
+<slide>slides/mongodb/title.xml</slide>
+<slide>slides/mongodb/me.xml</slide>
+
+<!-- INTRODUCTION -->
+<slide>slides/time/problems-condensed.xml</slide>
+
+<!-- PHP - IMPROVEMENTS -->
+<slide>slides/time/improvements-timezones.xml</slide>
+<slide>slides/time/improvements-more-on-timezones.xml</slide>
+<slide>slides/time/default-timezone.xml</slide>
+<slide>slides/time/timestamps-suck.xml</slide>
+
+<!-- PHP - CODE EXAMPLES -->
+<slide>slides/time/basic-parse-time-new.xml</slide>
+<slide>slides/time/date-parse2.xml</slide>
+<slide>slides/time/date-parse-from-format3.xml</slide>
+<slide>slides/time/date-parse-from-format2.xml</slide>
+
+<!-- DATE EXAMPLES -->
+<slide>slides/time/date-modify.xml</slide>
+<slide>slides/time/date-modify-immutable1.xml</slide>
+<slide>slides/time/date-modify-immutable2.xml</slide>
+<slide>slides/time/timezone-object-1.xml</slide>
+<slide>slides/time/date-timezone.xml</slide>
+<slide>slides/time/timezone-utilities-3.xml</slide>
+
+<!-- INTERVALS and PERIODS -->
+<slide>slides/time/intervals.xml</slide>
+<slide>slides/time/intervals-2.xml</slide>
+<slide>slides/time/relative-month.xml</slide>
+<slide>slides/time/relative-month3.xml</slide>
+<slide>slides/time/period-2.xml</slide>
+
+<!-- STORING in DATABASE -->
+<slide>slides/time/in-database1.xml</slide>
+<slide>slides/time/in-database2.xml</slide>
+<slide>slides/time/in-database3.xml</slide>
+<slide>slides/time/in-database4.xml</slide>
+
+<!-- EXIT -->
+<slide>slides/time/book.xml</slide> <!-- resources -->
+<slide>slides/mongodb/resources.xml</slide> <!-- resources -->
+</presentation>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.