MapReduce,  Geospatial  Indexes,  
   and  Other  Cool  Features



         Kristina  Chodorow
connecting  to  
    your  mongod
connecting  to  
    your  mongod


           you
connecting  to  
    your  mongod


           you


                 mongod
mongod
mongod
update   insert query insert   query   mongod
mongod



driver
query


    insert


   driver
insert




           query   mongod



driver
insert
getlasterror




                   mongod



          driver
insert
         getlasterror
                        mongod



driver
replication
 Dwight  @  3:15
 Farallon Room
insert  this
all  set
insert  this
all  set
make  sure  two  
slaves  have  this
all  set
make  sure  two  
slaves  have  this
>  db.runCommand({
...  getlasterror :  1
...  })
>  db.runCommand({
...  getlasterror :  1,
...  w  :  3
...  })
>  db.runCommand({
...  getlasterror :  1,
...  w  :  500
...  })
>  db.runCommand({
...  getlasterror :  1,
...  w  :  500,
...  wtimeout :  3000
...  })
>  db.runCommand({
...  getlasterror :  1,
...  fsync :  true
...  })
some  internals
Operations:
      insert
      update
      remove
      query
      get  more
Operations:
      insert
      update
      remove
      query
      get  more
Operations:
      insert
      update
      remove
      query
      get  more
Operations:
      insert
      update
      remove
      query
      get  more
Operations:
      insert
      update
      remove
      query
      get  more
Operations:
      insert
      update
      remove
      query
      get  more
Operations:
      insert
      update
      remove
      query
      get  more
get  help
$  mongo
MongoDB  shell  version  1.5.1
url:  test
connecting  to:  test
type  "help"  for  help
>
$  mongo
MongoDB  shell  version  1.5.1
url:  test
connecting  to:  test
type  "help"  for  help
>
>  db.help()
DB  methods:
      db.addUser()
      db.auth()
      db.cloneDatabase()
      db.commandHelp()
      db.copy...
>  db.foo.help()
DBCollection help
      db.foo.count()
      db.foo.dataSize()
      db.foo.distinct()
      db.foo.drop(...
>  var cursor  =  db.foo.find()
>  cursor.help()
DBQuery help
      .sort()
      .limit()
      .skip()
      .count()
  ...
http://api.mongodb.org/js
>  db.foo.count()
40
>
>  db.foo.count()
40
>  db.foo.count
>  db.foo.count()
40
>  db.foo.count
function(x)  {
   return  this.find(x).count();;
}
>
>  db.foo.count()
40
>  db.foo.count
function(x)  {
   return  this.find(x).count();;
}
>  var cursor  =  db.foo.find()
>
>  db.foo.count()
40
>  db.foo.count
function(x)  {
   return  this.find(x).count();;
}
>  var cursor  =  db.foo.find()
> ...
>  cursor.count
function(applySkipLimit)  {
   var cmd =  {count  :  this._collection.getName()};;
   if  (this._query)  {...
function(x)  {
  //  prep  cmd
  ...

    //  run  command
    var res  =  this._db.runCommand(cmd);;

    //  return  res...
>  db.runCommand({count  :  "foo"})
{
     "n"  :  40,
     "ok"  :  1
}
>
>  db.runCommand({listCommands :  1})
>  db.runCommand({listCommands :  1})
{
   "commands"  :  {
     "$eval"  :  {...},
     "assertinfo :  {...},
     "authe...
>  db.runCommand({
...  datasize :  collectionName})
>  db.runCommand({
...  datasize :  collectionName})


>  db.runCommand({
...  dbstats :  1})
>  db.commandHelp("distinct")
help  for:  distinct:  {  
   distinct  :  'collection  name',
   key  :  'a.b'  }
>
>  db.commandHelp("distinct")
help  for:  distinct:  {  
   distinct  :  'collection  name',
   key  :  'a.b'  }
>  db.com...
>  db.runCommand({"count"  :  1,  
...  "help"  :  true})
>  db.runCommand({"count"  :  1,  
...  "help"  :  true})
help  for:  count:  no  help  defined
>
$
>  db.blog.posts.find(
...  {_id  :  123},
...  {comments  :  1})
>  db.blog.posts.find(
...  {_id  :  123},
...  {comments  :  {$slice  :  10}})
>  db.blog.posts.find(
...  {_id  :  123},
...  {comments  :  {$slice  :  [20,  10]}})
>  db.blog.posts.find(
...  {_id  :  123},
...  {comments  :  {$slice  :  -­10}})
>  db.blog.posts.find(
...  {_id  :  123},
...  {comments  :  {$slice  :  [-­20,  10]}})
>  db.blog.posts.find({
...  comments  :  {
...      date  :  {$gt :  today},
...      votes  :  {$gte :  10}
...  }})
>  db.blog.posts.find({
...  'comments.date'  :  {$gt :  today},
...  'comments.votes'  :  {$gte :  10}
...  })
>  db.blog.posts.find({
...  comments  :  {$elemMatch :  {
...      date  :  {$gt :  today},
...      votes  :  {$gte :  1...
Types
minKey




         maxKey
MapReduce
{
    _id  :  123,
    name  :  "Fred",
    email  :  "fred@example.com"
}

{
    _id  :  456,
    name  :  "Paul",
    ph...
_id                 40
name                32
email               20
phone               2
picture             17
pet     ...
{
    _id  :  123,
    name  :  "Fred",
    email  :  "fred@example.com"
}
1
    1
        1
_id
            1




            name
       1




    email
1
email
email
12
cluck  cluck




               12
email

        12
map  =  function()  {
  for  (var key  in  this)  {
     emit(key,  1);;
  }
}
reduce  =  function(prev,  current)  {
  var count  =  0;;
  for  (var egg  in  current)  {
    count  +=  current[egg];;
...
A   B   C   D   E   F
A   B   C   D   E   F
A                 B           C                D              E              F




_id  :  A,  value  :              _id  ...
GridFS
Indexes
>  db.users.find({
...  date  :  new  Date("10/3/2010")})




>  db.users.ensureIndex({
...  date  :  1})
Dates,  timestamps,  ObjectIds
indexing
Aaron  @  3:15
Niantic  Room
Geospatial  Indexes
>  db.map.ensureIndex({location  :  "2d"})
>
>  db.map.insert({location  :  [-­40,  78]})
>
>  db.map.insert({location  :  [-­40,  78]})
>  db.map.insert({location  :  {
...  x  :  -­40,  
...  y  :  78}})
>
>  db.map.insert({location  :  [-­40,  78]})
>  db.map.insert({location  :  {
...  x  :  -­40,  
...  y  :  78}})
>  db.ma...
>  db.map.find({location  :  {
...  $near  :  [-­40,  77]}})
>  db.map.find({location  :  {
...  $near  :  [-­40,  77]}})-­>limit(10)
>  db.map.ensureIndex({
...  location  :  "2d",
...  user  :  1});;
1  degree  of  longitude  at  the  equator:
1  degree  of  longitude  at  the  equator:




1  degree  of  longitude  near  the  poles:
geospatial
 Eliot  @  10:15
Gateway  Room
please  help  
  document  stuff!

http://cookbook.mongodb.org
want  to  work  on  
   mongodb?


http://www.10gen.com/jobs
thank  you!

          @kchodorow

http://www.snailinaturtleneck.com
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
Upcoming SlideShare
Loading in...5
×

Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)

16,624

Published on

Published in: Technology
2 Comments
30 Likes
Statistics
Notes
  • mongodb
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 地理位置索引不错
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
16,624
On Slideshare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
299
Comments
2
Likes
30
Embeds 0
No embeds

No notes for slide

Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)

  1. 1. MapReduce,  Geospatial  Indexes,   and  Other  Cool  Features Kristina  Chodorow
  2. 2. connecting  to   your  mongod
  3. 3. connecting  to   your  mongod you
  4. 4. connecting  to   your  mongod you mongod
  5. 5. mongod
  6. 6. mongod
  7. 7. update insert query insert query mongod
  8. 8. mongod driver
  9. 9. query insert driver
  10. 10. insert query mongod driver
  11. 11. insert getlasterror mongod driver
  12. 12. insert getlasterror mongod driver
  13. 13. replication Dwight  @  3:15 Farallon Room
  14. 14. insert  this
  15. 15. all  set
  16. 16. insert  this
  17. 17. all  set
  18. 18. make  sure  two   slaves  have  this
  19. 19. all  set
  20. 20. make  sure  two   slaves  have  this
  21. 21. >  db.runCommand({ ...  getlasterror :  1 ...  })
  22. 22. >  db.runCommand({ ...  getlasterror :  1, ...  w  :  3 ...  })
  23. 23. >  db.runCommand({ ...  getlasterror :  1, ...  w  :  500 ...  })
  24. 24. >  db.runCommand({ ...  getlasterror :  1, ...  w  :  500, ...  wtimeout :  3000 ...  })
  25. 25. >  db.runCommand({ ...  getlasterror :  1, ...  fsync :  true ...  })
  26. 26. some  internals
  27. 27. Operations: insert update remove query get  more
  28. 28. Operations: insert update remove query get  more
  29. 29. Operations: insert update remove query get  more
  30. 30. Operations: insert update remove query get  more
  31. 31. Operations: insert update remove query get  more
  32. 32. Operations: insert update remove query get  more
  33. 33. Operations: insert update remove query get  more
  34. 34. get  help
  35. 35. $  mongo MongoDB  shell  version  1.5.1 url:  test connecting  to:  test type  "help"  for  help >
  36. 36. $  mongo MongoDB  shell  version  1.5.1 url:  test connecting  to:  test type  "help"  for  help >
  37. 37. >  db.help() DB  methods: db.addUser() db.auth() db.cloneDatabase() db.commandHelp() db.copyDatabase() db.createCollection() db.currentOp() ...
  38. 38. >  db.foo.help() DBCollection help db.foo.count() db.foo.dataSize() db.foo.distinct() db.foo.drop() db.foo.dropIndex() db.foo.dropIndexes() ...
  39. 39. >  var cursor  =  db.foo.find() >  cursor.help() DBQuery help .sort() .limit() .skip() .count() .size() ...
  40. 40. http://api.mongodb.org/js
  41. 41. >  db.foo.count() 40 >
  42. 42. >  db.foo.count() 40 >  db.foo.count
  43. 43. >  db.foo.count() 40 >  db.foo.count function(x)  { return  this.find(x).count();; } >
  44. 44. >  db.foo.count() 40 >  db.foo.count function(x)  { return  this.find(x).count();; } >  var cursor  =  db.foo.find() >
  45. 45. >  db.foo.count() 40 >  db.foo.count function(x)  { return  this.find(x).count();; } >  var cursor  =  db.foo.find() >  cursor.count
  46. 46. >  cursor.count function(applySkipLimit)  { var cmd =  {count  :  this._collection.getName()};; if  (this._query)  { if  (this._special)  { cmd.query =  this._query.query;; } else  { cmd.query =  this._query;; } } cmd.fields =  this._fields ||  {};; if  (applySkipLimit)  { if  (this._limit)  { cmd.limit =  this._limit;; ...
  47. 47. function(x)  { //  prep  cmd ... //  run  command var res  =  this._db.runCommand(cmd);; //  return  result ... }
  48. 48. >  db.runCommand({count  :  "foo"}) { "n"  :  40, "ok"  :  1 } >
  49. 49. >  db.runCommand({listCommands :  1})
  50. 50. >  db.runCommand({listCommands :  1}) { "commands"  :  { "$eval"  :  {...}, "assertinfo :  {...}, "authenticate"  :  {...}, "buildinfo"  :  {...}, "clean"  :  {...}, "clone"  :  {...}, "cloneCollection"  :  {...}, "cloneCollectionAsCapped"  :  {...}, "closeAllDatabases"  :  {...}, ...
  51. 51. >  db.runCommand({ ...  datasize :  collectionName})
  52. 52. >  db.runCommand({ ...  datasize :  collectionName}) >  db.runCommand({ ...  dbstats :  1})
  53. 53. >  db.commandHelp("distinct") help  for:  distinct:  {   distinct  :  'collection  name', key  :  'a.b'  } >
  54. 54. >  db.commandHelp("distinct") help  for:  distinct:  {   distinct  :  'collection  name', key  :  'a.b'  } >  db.commandHelp function(name)  { var c  =  {};; c[name]  =  1;; c.help =  true;; return  this.runCommand(c).help;; } >
  55. 55. >  db.runCommand({"count"  :  1,   ...  "help"  :  true})
  56. 56. >  db.runCommand({"count"  :  1,   ...  "help"  :  true}) help  for:  count:  no  help  defined >
  57. 57. $
  58. 58. >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  1})
  59. 59. >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  10}})
  60. 60. >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  [20,  10]}})
  61. 61. >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  -­10}})
  62. 62. >  db.blog.posts.find( ...  {_id  :  123}, ...  {comments  :  {$slice  :  [-­20,  10]}})
  63. 63. >  db.blog.posts.find({ ...  comments  :  { ...      date  :  {$gt :  today}, ...      votes  :  {$gte :  10} ...  }})
  64. 64. >  db.blog.posts.find({ ...  'comments.date'  :  {$gt :  today}, ...  'comments.votes'  :  {$gte :  10} ...  })
  65. 65. >  db.blog.posts.find({ ...  comments  :  {$elemMatch :  { ...      date  :  {$gt :  today}, ...      votes  :  {$gte :  10} ...  }}})
  66. 66. Types
  67. 67. minKey maxKey
  68. 68. MapReduce
  69. 69. { _id  :  123, name  :  "Fred", email  :  "fred@example.com" } { _id  :  456, name  :  "Paul", phone  :  "555-­5555", picture  :  BinData } { _id  :  789, email  :  "alice@example.com", }
  70. 70. _id               40 name             32 email         20 phone           2 picture       17 pet             3 friends   40 hobbies       6 favorites   12 notes           14
  71. 71. { _id  :  123, name  :  "Fred", email  :  "fred@example.com" }
  72. 72. 1 1 1
  73. 73. _id 1 name 1 email 1
  74. 74. email
  75. 75. email
  76. 76. 12
  77. 77. cluck  cluck 12
  78. 78. email 12
  79. 79. map  =  function()  { for  (var key  in  this)  { emit(key,  1);; } }
  80. 80. reduce  =  function(prev,  current)  { var count  =  0;; for  (var egg  in  current)  { count  +=  current[egg];; } return  count;; }
  81. 81. A B C D E F
  82. 82. A B C D E F
  83. 83. A B C D E F _id  :  A,  value  : _id  :  C,  value  : _id  :  E,  value  : _id  :  B,  value  : _id  :  D,  value  : _id  :  F,  value  :
  84. 84. GridFS
  85. 85. Indexes
  86. 86. >  db.users.find({ ...  date  :  new  Date("10/3/2010")}) >  db.users.ensureIndex({ ...  date  :  1})
  87. 87. Dates,  timestamps,  ObjectIds
  88. 88. indexing Aaron  @  3:15 Niantic  Room
  89. 89. Geospatial  Indexes
  90. 90. >  db.map.ensureIndex({location  :  "2d"}) >
  91. 91. >  db.map.insert({location  :  [-­40,  78]}) >
  92. 92. >  db.map.insert({location  :  [-­40,  78]}) >  db.map.insert({location  :  { ...  x  :  -­40,   ...  y  :  78}}) >
  93. 93. >  db.map.insert({location  :  [-­40,  78]}) >  db.map.insert({location  :  { ...  x  :  -­40,   ...  y  :  78}}) >  db.map.insert({location  :  { ...  longitude  :  -­40,   ...  latitude  :  78}}) >
  94. 94. >  db.map.find({location  :  { ...  $near  :  [-­40,  77]}})
  95. 95. >  db.map.find({location  :  { ...  $near  :  [-­40,  77]}})-­>limit(10)
  96. 96. >  db.map.ensureIndex({ ...  location  :  "2d", ...  user  :  1});;
  97. 97. 1  degree  of  longitude  at  the  equator:
  98. 98. 1  degree  of  longitude  at  the  equator: 1  degree  of  longitude  near  the  poles:
  99. 99. geospatial Eliot  @  10:15 Gateway  Room
  100. 100. please  help   document  stuff! http://cookbook.mongodb.org
  101. 101. want  to  work  on   mongodb? http://www.10gen.com/jobs
  102. 102. thank  you! @kchodorow http://www.snailinaturtleneck.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×