Mongodb railscamphh

Click here to load reader

  • date post

    30-Oct-2014
  • Category

    Technology

  • view

    1.312
  • download

    3

Embed Size (px)

description

 

Transcript of Mongodb railscamphh

1. on rails railscamp hamburg, 2010 jan krutisch http://jan.krutisch.de/ Samstag, 23. Oktober 2010 2. mongodb wtf? lol!? Samstag, 23. Oktober 2010 3. document database Samstag, 23. Oktober 2010 4. NoS QL inclu ded! document database Samstag, 23. Oktober 2010 5. 10gen Samstag, 23. Oktober 2010 6. open source http://github.com/mongodb/mongo Samstag, 23. Oktober 2010 7. id title descr pos_lat pos_lng Samstag, 23. Oktober 2010 8. { "_id" : ObjectId("4c00245062610475a005afcd"), "address" : "Bernstorffstr. 174n22767 HamburgnDE", "description" : null, "position" : { "lat" : 53.5600912, "lng" : 9.9596977 }, "tags" : [ "hausarzt", "naturheilverfahren", "akupunktur", "allgemeinmedizin" ], "title" : "Dr. med. Lilo Eisenbarth", "loxicon_id" : 808261 } Samstag, 23. Oktober 2010 9. Samstag, 23. Oktober 2010 10. Samstag, 23. Oktober 2010 11. Samstag, 23. Oktober 2010 12. BSON Samstag, 23. Oktober 2010 13. BInary Serialized jsON http://bsonspec.org/ Samstag, 23. Oktober 2010 14. Wire Samstag, 23. Oktober 2010 15. Storage Samstag, 23. Oktober 2010 16. rich queries Samstag, 23. Oktober 2010 17. conceptually close to SQL Samstag, 23. Oktober 2010 18. easy to grasp Samstag, 23. Oktober 2010 19. exible Samstag, 23. Oktober 2010 20. language integration Samstag, 23. Oktober 2010 21. on top: map/reduce Samstag, 23. Oktober 2010 22. Scaling Samstag, 23. Oktober 2010 23. Master/Slave replication Samstag, 23. Oktober 2010 24. Replica Sets (1.6) Samstag, 23. Oktober 2010 25. Primary Member Member Samstag, 23. Oktober 2010 26. Primary Member Primary Samstag, 23. Oktober 2010 27. Member Member Primary Samstag, 23. Oktober 2010 28. Autosharding (1.6) Samstag, 23. Oktober 2010 29. Samstag, 23. Oktober 2010 30. Durability Samstag, 23. Oktober 2010 31. No single server durability! Samstag, 23. Oktober 2010 32. fsyncs every 60s (congurable) Samstag, 23. Oktober 2010 33. Use Replication! Samstag, 23. Oktober 2010 34. Use write propagation locking Samstag, 23. Oktober 2010 35. Single Server Durability planned for 1.8 Samstag, 23. Oktober 2010 36. mongo console Samstag, 23. Oktober 2010 37. $ mongo Samstag, 23. Oktober 2010 38. > use test switched to db test db.quotes.save({ text: "You can observe a lot just by watching.", from: "Yogi Berra", created_at: new Date() }); db.quotes.save({ text: "Silence is one of the hardest arguments to refute.", from: "Josh Billings", created_at: new Date() }); Samstag, 23. Oktober 2010 39. > use test switched to db test db.quotes.save({ text: "You can observe a lot just by watching.", from: "Yogi Berra", created_at: new Date() }); db.quotes.save({ text: "Silence is one of the hardest arguments to refute.", from: "Josh Billings", created_at: new Date() }); Samstag, 23. Oktober 2010 40. Indexing Samstag, 23. Oktober 2010 41. Same concept as with SQL databases Samstag, 23. Oktober 2010 42. You want them Samstag, 23. Oktober 2010 43. Same concept as with SQL databases Samstag, 23. Oktober 2010 44. Sort order Samstag, 23. Oktober 2010 45. Unique Samstag, 23. Oktober 2010 46. Compound Samstag, 23. Oktober 2010 47. Geospatial Samstag, 23. Oktober 2010 48. map/reduce Samstag, 23. Oktober 2010 49. we can haz it, too Samstag, 23. Oktober 2010 50. function() { this.tags.forEach(function(z) { emit(z, {count: 1}); }); } Samstag, 23. Oktober 2010 51. function(key, values) { var total = 0; values.forEach(function(v) { total += v.count }); return {count: total} } Samstag, 23. Oktober 2010 52. (its not fast...) Samstag, 23. Oktober 2010 53. security Samstag, 23. Oktober 2010 54. simple user/password auth Samstag, 23. Oktober 2010 55. per database Samstag, 23. Oktober 2010 56. read only is possible Samstag, 23. Oktober 2010 57. one more thing Samstag, 23. Oktober 2010 58. GridFS Samstag, 23. Oktober 2010 59. Binary elds in BSON < 4MB Samstag, 23. Oktober 2010 60. GridFS saves les in chunks Samstag, 23. Oktober 2010 61. Im in ur rubies, querying teh MongoDB! Samstag, 23. Oktober 2010 62. core driver Samstag, 23. Oktober 2010 63. mongo / bson_ext Samstag, 23. Oktober 2010 64. ODMs / Libs Samstag, 23. Oktober 2010 65. mongo_mapper Samstag, 23. Oktober 2010 66. mongoid Samstag, 23. Oktober 2010 67. Find examples here: http://github.com/halfbyte/mongo_ruby_examples Samstag, 23. Oktober 2010 68. Basic driver usage Samstag, 23. Oktober 2010 69. init Samstag, 23. Oktober 2010 70. require 'mongo' @connection = Mongo::Connection.new @db = @connection.db("test") Samstag, 23. Oktober 2010 71. @connection = Mongo::Connection.new( 'localhost', 27017, :pool_size => 5, :timeout => 20 ) Samstag, 23. Oktober 2010 72. @connection = Mongo::Connection.from_uri( "mongodb://localhost:27017/test" ) Samstag, 23. Oktober 2010 73. insert/upsert Samstag, 23. Oktober 2010 74. doc = { :text => "You can observe a lot just by watching.", :from => "Yogi Berra", :created_at => Time.now } @db['quotes'].insert(doc) Samstag, 23. Oktober 2010 75. doc = @db['quotes'].find_one(id) doc[:from] = "Yogi Berra, famous baseball player" @db['quotes'].save(doc) Samstag, 23. Oktober 2010 76. atomic updates Samstag, 23. Oktober 2010 77. @db['quotes'].update( {"from" => "Yogi Berra"}, {"$inc" => {"reads" => 1 } } ) Samstag, 23. Oktober 2010 78. @db['quotes'].update( {"from" => "Yogi Berra"}, {"$inc" => {"reads" => 1 } } ) Samstag, 23. Oktober 2010 79. $inc $addToSet $set $pop $unset $pull $push $pullAll $pushAll $ Samstag, 23. Oktober 2010 80. getting a whole collection Samstag, 23. Oktober 2010 81. @db['quotes'].find.each do |row| puts row.inspect end Samstag, 23. Oktober 2010 82. exact query Samstag, 23. Oktober 2010 83. @db['quotes'].find(:from => "Yogi Berra") Samstag, 23. Oktober 2010 84. more queries Samstag, 23. Oktober 2010 85. 100.times do |i| db['numbers'].insert({"i" => i}) end Samstag, 23. Oktober 2010 86. db['numbers'].find("i" => {"$lt" => 2}) Samstag, 23. Oktober 2010 87. $lt < $gt > $lte = $ne != Samstag, 23. Oktober 2010 88. @db['people'].find(:tags => {"$in" => ['cool']}) Samstag, 23. Oktober 2010 89. obj = { "_id"=>BSON::ObjectID('4c706af16261040680000369'), "name"=>"Vernon Kreiger", "address"=>{ "street"=>"536 Haleigh Locks", "city"=>"Port Kiannahaven", "zip"=>"80730-0214", "country"=>"Fakistan" }, "tags"=>["cool", "weird"] } Samstag, 23. Oktober 2010 90. obj = { "_id"=>BSON::ObjectID('4c706af16261040680000369'), "name"=>"Vernon Kreiger", "address"=>{ "street"=>"536 Haleigh Locks", "city"=>"Port Kiannahaven", "zip"=>"80730-0214", "country"=>"Fakistan" }, "tags"=>["cool", "weird"] } Samstag, 23. Oktober 2010 91. $in IN (2,3,4) $nin NOT IN $all [2,3] ~ [1,2,3] Samstag, 23. Oktober 2010 92. $mod yah, RLY $size okay $exists NOT NULL $type huh? Samstag, 23. Oktober 2010 93. @db['people'].find("address.city" => /haven/) Samstag, 23. Oktober 2010 94. @db['people'].find("address.city" => /haven/) Samstag, 23. Oktober 2010 95. Sorting Samstag, 23. Oktober 2010 96. @db['people'].find().sort("address.street") Samstag, 23. Oktober 2010 97. @db['people'].find().sort("address.street") Samstag, 23. Oktober 2010 98. Pagination Samstag, 23. Oktober 2010 99. @db['numbers'].find.sort("i").limit(10) Samstag, 23. Oktober 2010 100. @db['numbers'].find.sort("i").limit(10).skip(50) Samstag, 23. Oktober 2010 101. Counting Samstag, 23. Oktober 2010 102. @db['numbers'].find.count Samstag, 23. Oktober 2010 103. Distinct Samstag, 23. Oktober 2010 104. @db['people'].distinct('tags').inspect Samstag, 23. Oktober 2010 105. Group Samstag, 23. Oktober 2010 106. Poor mans map/reduce Samstag, 23. Oktober 2010 107. @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010 108. @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010 109. @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010 110. @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010 111. @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010 112. function(doc, prev) { for(i in doc.tags) { if (doc.tags[i] in prev.tags) { prev.tags[doc.tags[i]]++ } else { prev.tags[doc.tags[i]] =1 } } } Samstag, 23. Oktober 2010 113. {"created_at"=>2010-09-19 22:00:00 UTC, "tags"=>{"foo"=>11.0, "dumb"=>12.0, "stupid"=>7.0, "bar"=>7.0, "cool"=>14.0, "weird"=>17.0}} {"created_at"=>2010-09-20 22:00:00 UTC, "tags"=>{"dumb"=>11.0, "stupid"=>5.0, "foo"=>10.0, "cool"=>8.0, "weird"=>9.0, "bar"=>15.0}} {"created_at"=>2010-09-22 22:00:00 UTC, "tags"=>{"weird"=>15.0, "bar"=>9.0, "stupid"=>17.0, "cool"=>11.0, "dumb"=>10.0, "foo"=>12.0}} {"created_at"=>2010-09-15 22:00:00 UTC, "tags"=>{"foo"=>11.0, "weird"=>7.0, "stupid"=>10.0, "cool"=>11.0, "bar"=>5.0, "dumb"=>8.0}} {"created_at"=>2010-09-25 22:00:00 UTC, "tags"=>{"dumb"=>11.0, "weird"=>14.0, "cool"=>8.0, "foo"=>21.0, "bar"=>11.0, "stupid"=>13.0}} {"created_at"=>2010-09-28 22:00:00 UTC, "tags"=>{"cool"=>11.0, "dumb"=>16.0, "stupid"=>11.0, "weird"=>15.0, "foo"=>9.0, "bar"=>16.0}} {"created_at"=>2010-09-10 22:00:00 UTC, "tags"=>{"dumb"=>15.0, "weird"=>9.0, "bar"=>8.0, "cool"=>14.0, "stupid"=>11.0, "foo"=>11.0}} {"created_at"=>2010-09-03 22:00:00 UTC, "tags"=>{"weird"=>14.0, "dumb"=>15.0, "stupid"=>11.0, "foo"=>16.0, "bar"=>20.0, "cool"=>10.0}} {"created_at"=>2010-09-21 22:00:00 UTC, "tags"=>{"weird"=>15.0, "cool"=>14.0, "foo"=>13.0, "stupid"=>6.0, "bar"=>11.0, "dumb"=>9.0}} {"created_at"=>2010-09-23 22:00:00 UTC, "tags"=>{"weird"=>15.0, "stupid"=>15.0, "dumb"=>15.0, "foo"=>16.0, "cool"=>10.0, "bar"=>11.0}} {"created_at"=>2010-09-29 22:00:00 UTC, "tags"=>{"bar"=>9.0, "cool"=>14.0, "weird"=>16.0, "foo"=>8.0, "dumb"=>9.0, "stupid"=>12.0}} {"created_at"=>2010-09-27 22:00:00 UTC, "tags"=>{"cool"=>13.0, "dumb"=>10.0, "stupid"=>12.0, "bar"=>8.0, "foo"=>16.0, "weird"=>13.0}} {"created_at"=>2010-09-04 22:00:00 UTC, "tags"=>{"cool"=>11.0, "bar"=>9.0, "stupid"=>6.0, "weird"=>11.0, "dumb"=>8.0, "foo"=>11.0}} {"created_at"=>2010-09-08 22:00:00 UTC, "tags"=>{"stupid"=>12.0, "dumb"=>11.0, "cool"=>15.0, "foo"=>11.0, "bar"=>9.0, "weird"=>8.0}} {"created_at"=>2010-10-02 22:00:00 UTC, "tags"=>{"bar"=>8.0, "dumb"=>8.0, "cool"=>10.0, "foo"=>10.0, "stupid"=>8.0, "weird"=>6.0}} {"created_at"=>2010-09-24 22:00:00 UTC, "tags"=>{"foo"=>13.0, "bar"=>12.0, "stupid"=>15.0, "weird"=>17.0, "dumb"=>7.0, "cool"=>10.0}} {"created_at"=>2010-09-30 22:00:00 UTC, "tags"=>{"bar"=>10.0, "cool"=>6.0, "stupid"=>14.0, "weird"=>9.0, "dumb"=>12.0, "foo"=>19.0}} {"created_at"=>2010-09-05 22:00:00 UTC, "tags"=>{"dumb"=>12.0, "foo"=>19.0, "weird"=>8.0, "stupid"=>8.0, "bar"=>7.0, "cool"=>10.0}} {"created_at"=>2010-09-17 22:00:00 UTC, "tags"=>{"weird"=>13.0, "bar"=>14.0, "dumb"=>12.0, "foo"=>12.0, "stupid"=>10.0, "cool"=>9.0}} {"created_at"=>2010-09-18 22:00:00 UTC, "tags"=>{"dumb"=>8.0, "cool"=>11.0, "foo"=>6.0, "bar"=>12.0, "weird"=>7.0, "stupid"=>6.0}} {"created_at"=>2010-09-09 22:00:00 UTC, "tags"=>{"weird"=>11.0, "dumb"=>9.0, "foo"=>6.0, "bar"=>11.0, "cool"=>11.0, "stupid"=>6.0}} {"created_at"=>2010-09-13 22:00:00 UTC, "tags"=>{"dumb"=>19.0, "stupid"=>9.0, "weird"=>12.0, "cool"=>11.0, "bar"=>10.0, "foo"=>15.0}} {"created_at"=>2010-09-16 22:00:00 UTC, "tags"=>{"bar"=>6.0, "weird"=>8.0, "dumb"=>9.0, "cool"=>11.0, "stupid"=>17.0, "foo"=>15.0}} {"created_at"=>2010-09-11 22:00:00 UTC, "tags"=>{"foo"=>10.0, "weird"=>9.0, "bar"=>8.0, "cool"=>4.0, "dumb"=>8.0, "stupid"=>9.0}} {"created_at"=>2010-09-26 22:00:00 UTC, "tags"=>{"dumb"=>15.0, "weird"=>6.0, "stupid"=>15.0, "bar"=>10.0, "foo"=>13.0, "cool"=>15.0}} {"created_at"=>2010-10-01 22:00:00 UTC, "tags"=>{"cool"=>7.0, "weird"=>11.0, "stupid"=>11.0, "bar"=>14.0, "foo"=>12.0, "dumb"=>11.0}} {"created_at"=>2010-09-12 22:00:00 UTC, "tags"=>{"bar"=>7.0, "weird"=>12.0, "stupid"=>11.0, "cool"=>10.0, "foo"=>11.0, "dumb"=>9.0}} {"created_at"=>2010-09-14 22:00:00 UTC, "tags"=>{"dumb"=>8.0, "foo"=>15.0, "cool"=>15.0, "stupid"=>15.0, "bar"=>7.0, "weird"=>14.0}} {"created_at"=>2010-09-07 22:00:00 UTC, "tags"=>{"dumb"=>10.0, "cool"=>7.0, "foo"=>14.0, "weird"=>15.0, "bar"=>11.0, "stupid"=>7.0}} {"created_at"=>2010-09-06 22:00:00 UTC, "tags"=>{"dumb"=>7.0, "bar"=>11.0, "cool"=>16.0, "weird"=>14.0, "foo"=>12.0, "stupid"=>6.0}} Samstag, 23. Oktober 2010 114. {"created_at"=>2010-09-19 22:00:00 UTC, "tags"=>{"foo"=>11.0, "dumb"=>12.0, "stupid"=>7.0, "bar"=>7.0, "cool"=>14.0, "weird"=>17.0}} {"created_at"=>2010-09-20 22:00:00 UTC, "tags"=>{"dumb"=>11.0, "stupid"=>5.0, "foo"=>10.0, "cool"=>8.0, "weird"=>9.0, "bar"=>15.0}} {"created_at"=>2010-09-22 22:00:00 UTC, "tags"=>{"weird"=>15.0, "bar"=>9.0, "stupid"=>17.0, "cool"=>11.0, "dumb"=>10.0, "foo"=>12.0}} {"created_at"=>2010-09-15 22:00:00 UTC, "tags"=>{"foo"=>11.0, "weird"=>7.0, "stupid"=>10.0, "cool"=>11.0, "bar"=>5.0, "dumb"=>8.0}} {"created_at"=>2010-09-25 22:00:00 UTC, "tags"=>{"dumb"=>11.0, "weird"=>14.0, "cool"=>8.0, "foo"=>21.0, "bar"=>11.0, "stupid"=>13.0}} {"created_at"=>2010-09-28 22:00:00 UTC, "tags"=>{"cool"=>11.0, "dumb"=>16.0, "stupid"=>11.0, "weird"=>15.0, "foo"=>9.0, "bar"=>16.0}} {"created_at"=>2010-09-10 22:00:00 UTC, "tags"=>{"dumb"=>15.0, "weird"=>9.0, "bar"=>8.0, "cool"=>14.0, "stupid"=>11.0, "foo"=>11.0}} {"created_at"=>2010-09-03 22:00:00 UTC, "tags" => { "tags"=>{"weird"=>14.0, "dumb"=>15.0, "stupid"=>11.0, "foo"=>16.0, "bar"=>20.0, "cool"=>10.0}} {"created_at"=>2010-09-21 22:00:00 UTC, "tags"=>{"weird"=>15.0, "cool"=>14.0, "foo"=>13.0, "stupid"=>6.0, "bar"=>11.0, "dumb"=>9.0}} {"created_at"=>2010-09-23 {"created_at"=>2010-09-29 22:00:00 22:00:00 UTC, UTC, "foo" => 11.0, "tags"=>{"weird"=>15.0, "stupid"=>15.0, "dumb"=>15.0, "foo"=>16.0, "cool"=>10.0, "bar"=>11.0}} "tags"=>{"bar"=>9.0, "cool"=>14.0, "weird"=>16.0, "foo"=>8.0, "dumb"=>9.0, "stupid"=>12.0}} {"created_at"=>2010-09-27 {"created_at"=>2010-09-04 22:00:00 22:00:00 UTC, UTC, "dumb" => 12.0, "tags"=>{"cool"=>13.0, "dumb"=>10.0, "stupid"=>12.0, "bar"=>8.0, "foo"=>16.0, "weird"=>13.0}} "tags"=>{"cool"=>11.0, "bar"=>9.0, "stupid"=>6.0, "weird"=>11.0, "dumb"=>8.0, "foo"=>11.0}} {"created_at"=>2010-09-08 {"created_at"=>2010-10-02 22:00:00 22:00:00 UTC, UTC, "stupid" => 7.0, "tags"=>{"stupid"=>12.0, "dumb"=>11.0, "cool"=>15.0, "foo"=>11.0, "bar"=>9.0, "weird"=>8.0}} "tags"=>{"bar"=>8.0, "dumb"=>8.0, "cool"=>10.0, "foo"=>10.0, "stupid"=>8.0, "weird"=>6.0}} {"created_at"=>2010-09-24 {"created_at"=>2010-09-30 22:00:00 22:00:00 UTC, UTC, "bar" => 7.0, "tags"=>{"foo"=>13.0, "bar"=>12.0, "stupid"=>15.0, "weird"=>17.0, "dumb"=>7.0, "cool"=>10.0}} "tags"=>{"bar"=>10.0, "cool"=>6.0, "stupid"=>14.0, "weird"=>9.0, "dumb"=>12.0, "foo"=>19.0}} {"created_at"=>2010-09-05 {"created_at"=>2010-09-17 22:00:00 22:00:00 UTC, UTC, "cool" => 14.0, "tags"=>{"dumb"=>12.0, "foo"=>19.0, "weird"=>8.0, "stupid"=>8.0, "bar"=>7.0, "cool"=>10.0}} "tags"=>{"weird"=>13.0, "bar"=>14.0, "dumb"=>12.0, "foo"=>12.0, "stupid"=>10.0, "cool"=>9.0}} {"created_at"=>2010-09-18 {"created_at"=>2010-09-09 22:00:00 22:00:00 UTC, UTC, "weird" => 17.0 "tags"=>{"dumb"=>8.0, "cool"=>11.0, "foo"=>6.0, "bar"=>12.0, "weird"=>7.0, "stupid"=>6.0}} "tags"=>{"weird"=>11.0, "dumb"=>9.0, "foo"=>6.0, "bar"=>11.0, "cool"=>11.0, "stupid"=>6.0}} {"created_at"=>2010-09-13 {"created_at"=>2010-09-16 22:00:00 22:00:00 UTC, UTC, } "tags"=>{"dumb"=>19.0, "stupid"=>9.0, "weird"=>12.0, "cool"=>11.0, "bar"=>10.0, "foo"=>15.0}} "tags"=>{"bar"=>6.0, "weird"=>8.0, "dumb"=>9.0, "cool"=>11.0, "stupid"=>17.0, "foo"=>15.0}} {"created_at"=>2010-09-11 22:00:00 UTC, "tags"=>{"foo"=>10.0, "weird"=>9.0, "bar"=>8.0, "cool"=>4.0, "dumb"=>8.0, "stupid"=>9.0}} {"created_at"=>2010-09-26 22:00:00 UTC, "tags"=>{"dumb"=>15.0, "weird"=>6.0, "stupid"=>15.0, "bar"=>10.0, "foo"=>13.0, "cool"=>15.0}} {"created_at"=>2010-10-01 22:00:00 UTC, "tags"=>{"cool"=>7.0, "weird"=>11.0, "stupid"=>11.0, "bar"=>14.0, "foo"=>12.0, "dumb"=>11.0}} {"created_at"=>2010-09-12 22:00:00 UTC, "tags"=>{"bar"=>7.0, "weird"=>12.0, "stupid"=>11.0, "cool"=>10.0, "foo"=>11.0, "dumb"=>9.0}} {"created_at"=>2010-09-14 22:00:00 UTC, "tags"=>{"dumb"=>8.0, "foo"=>15.0, "cool"=>15.0, "stupid"=>15.0, "bar"=>7.0, "weird"=>14.0}} {"created_at"=>2010-09-07 22:00:00 UTC, "tags"=>{"dumb"=>10.0, "cool"=>7.0, "foo"=>14.0, "weird"=>15.0, "bar"=>11.0, "stupid"=>7.0}} {"created_at"=>2010-09-06 22:00:00 UTC, "tags"=>{"dumb"=>7.0, "bar"=>11.0, "cool"=>16.0, "weird"=>14.0, "foo"=>12.0, "stupid"=>6.0}} Samstag, 23. Oktober 2010 115. function(prev) { var mostPopular = 0; for(i in prev.tags) { if(prev.tags[i] > mostPopular) { prev.tag = i; prev.count = prev.tags[i]; mostPopular = prev.tags[i]; } } delete prev.tags } Samstag, 23. Oktober 2010 116. {"created_at"=>2010-09-27 22:00:00 UTC, "tag"=>"stupid", "count"=>18.0} {"created_at"=>2010-09-29 22:00:00 UTC, "tag"=>"stupid", "count"=>20.0} {"created_at"=>2010-09-12 22:00:00 UTC, "tag"=>"cool", "count"=>11.0} {"created_at"=>2010-09-04 22:00:00 UTC, "tag"=>"stupid", "count"=>12.0} {"created_at"=>2010-09-21 22:00:00 UTC, "tag"=>"stupid", "count"=>16.0} {"created_at"=>2010-09-03 22:00:00 UTC, "tag"=>"foo", "count"=>15.0} {"created_at"=>2010-09-26 22:00:00 UTC, "tag"=>"foo", "count"=>17.0} {"created_at"=>2010-09-18 22:00:00 UTC, "tag"=>"foo", "count"=>17.0} {"created_at"=>2010-09-24 22:00:00 UTC, "tag"=>"cool", "count"=>11.0} Samstag, 23. Oktober 2010 117. Map / Reduce Samstag, 23. Oktober 2010 118. map = true, :max => 50 ) @db.create_collection('capped_numbers', :capped => true, :size => 1024 * 64 ) Samstag, 23. Oktober 2010 129. explain Samstag, 23. Oktober 2010 130. @db['people'].find( "address.city" => /haven/ ).explain Samstag, 23. Oktober 2010 131. @db['people'].find( "address.city" => /haven/ ).explain Samstag, 23. Oktober 2010 132. { "cursor"=>"BasicCursor", "nscanned"=>1000, "nscannedObjects"=>1000, "n"=>39, "millis"=>2, "indexBounds"=>{}, "allPlans"=>[ {"cursor"=>"BasicCursor", "indexBounds"=>{}} ] } Samstag, 23. Oktober 2010 133. { "cursor"=>"BtreeCursor address.city_1 multi", "nscanned"=>1000, "nscannedObjects"=>39, "n"=>39, "millis"=>1, "indexBounds"=>{ "address.city"=>[["", {}], [/haven/, /haven/]] }, "allPlans"=>[ { "cursor"=>"BtreeCursor address.city_1 multi", "indexBounds"=>{ "address.city"=>[["", {}], [/haven/, /haven/]] } } ] } Samstag, 23. Oktober 2010 134. ODMs Samstag, 23. Oktober 2010 135. mongo_mapper Samstag, 23. Oktober 2010 136. John Nunemaker @jnunemaker Samstag, 23. Oktober 2010 137. is in production Samstag, 23. Oktober 2010 138. documentation? Samstag, 23. Oktober 2010 139. Samstag, 23. Oktober 2010 140. how to Samstag, 23. Oktober 2010 141. rails initializer Samstag, 23. Oktober 2010 142. # config/initializers/mongo_mapper.rb File.open(File.join(Rails.root, 'config/mongodb.yml'), 'r') do |f| @settings = YAML.load(f)[Rails.env] end MongoMapper.connection = Mongo::Connection.from_uri(@settings["connection"]) if @settings["connection"] MongoMapper.database = @settings["database"] Samstag, 23. Oktober 2010 143. a simple example Samstag, 23. Oktober 2010 144. MongoMapper.connection = @connection MongoMapper.database = "test" class Quote include MongoMapper::Document key :from key :text key :views, Integer timestamps! end Samstag, 23. Oktober 2010 145. nders Samstag, 23. Oktober 2010 146. Quote.where(:from => 'Yogi Berra').all Quote.where(:from => 'Yogi Berra').limit(5).sort(:from.desc).all Samstag, 23. Oktober 2010 147. embedded docs Samstag, 23. Oktober 2010 148. Samstag, 23. Oktober 2010 149. class Person include MongoMapper::Document key :name one :address key :tags, Array end class Address include MongoMapper::Document key :street key :city key :country key :zip end Samstag, 23. Oktober 2010 150. person = Person.first address = Person.first.address Samstag, 23. Oktober 2010 151. scopes Samstag, 23. Oktober 2010 152. class Person scope :tagged, lambda { |tag| where(:tags.in => [tag]) } end puts Person.tagged('cool').first.inspect Samstag, 23. Oktober 2010 153. new website coming soon Samstag, 23. Oktober 2010 154. mongoid Samstag, 23. Oktober 2010 155. Durran Jordan (of Hashrocket) Samstag, 23. Oktober 2010 156. Two major versions Samstag, 23. Oktober 2010 157. 1.x (1.9.x) targeting Rails 2.3.x Samstag, 23. Oktober 2010 158. 2.x (2.0beta) targeting Rails 3.0 Samstag, 23. Oktober 2010 159. Good documentation Samstag, 23. Oktober 2010 160. Samstag, 23. Oktober 2010 161. rails initializer Samstag, 23. Oktober 2010 162. File.open(File.join(RAILS_ROOT, 'config/mongodb.yml'), 'r') do |f| @settings = YAML.load(f)[RAILS_ENV] end Mongoid::Config.instance.from_hash(@settings) Samstag, 23. Oktober 2010 163. a simple example Samstag, 23. Oktober 2010 164. class Quote include Mongoid::Document include Mongoid::Timestamps field :from field :text field :views, :type => Integer end Samstag, 23. Oktober 2010 165. nders Samstag, 23. Oktober 2010 166. Quote.where(:from => 'Yogi Berra').all Quote.where(:from => 'Yogi Berra').limit(5).order_by(:from.desc).all Samstag, 23. Oktober 2010 167. embedded docs Samstag, 23. Oktober 2010 168. class Person include Mongoid::Document field :name embeds_one :address field :tags, :type => Array end class Address include Mongoid::Document field :street field :city field :country field :zip end Samstag, 23. Oktober 2010 169. person = Person.first address = Person.first.address Samstag, 23. Oktober 2010 170. scopes Samstag, 23. Oktober 2010 171. class Person scope :tagged, lambda { |tag| where(:tags.in => [tag]) } end puts Person.tagged('cool').first.inspect Samstag, 23. Oktober 2010 172. More features Samstag, 23. Oktober 2010 173. atomic updates Samstag, 23. Oktober 2010 174. mongoid tries to be clever Samstag, 23. Oktober 2010 175. (using the dirty ags) Samstag, 23. Oktober 2010 176. (its probably better to bypass the ODM sometimes) Samstag, 23. Oktober 2010 177. GridFS Samstag, 23. Oktober 2010 178. external libraries for both Samstag, 23. Oktober 2010 179. mongo_mapper > grip Samstag, 23. Oktober 2010 180. mongoid > mongoid_grid Samstag, 23. Oktober 2010 181. Other noteworthy libraries Samstag, 23. Oktober 2010 182. Other not so noteworthy libraries Samstag, 23. Oktober 2010 183. I Samstag, 23. Oktober 2010 184. thanks for listening. http://www.mongodb.org/ http://www.mongoid.org/ http://github.com/jnunemaker/mongo_mapper http://github.com/halfbyte/mongo_ruby_examples [email protected] http://jan.krutisch.de/ http://github.com/halfbyte/ http://twitter.com/halfbyte http://www.mindmatters.de/ Samstag, 23. Oktober 2010