Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Mongodb railscamphh

on

  • 1,274 views

 

Statistics

Views

Total Views
1,274
Views on SlideShare
1,213
Embed Views
61

Actions

Likes
1
Downloads
4
Comments
0

1 Embed 61

http://coderwall.com 61

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Mongodb railscamphh Mongodb railscamphh Presentation Transcript

  • on rails railscamp hamburg, 2010 jan krutisch <jan@krutisch.de> http://jan.krutisch.de/ Samstag, 23. Oktober 2010
  • mongodb wtf? lol!? Samstag, 23. Oktober 2010
  • document database Samstag, 23. Oktober 2010
  • NoS QL inclu ded! document database Samstag, 23. Oktober 2010
  • 10gen Samstag, 23. Oktober 2010
  • open source http://github.com/mongodb/mongo Samstag, 23. Oktober 2010
  • id title descr pos_lat pos_lng Samstag, 23. Oktober 2010
  • { "_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
  • Samstag, 23. Oktober 2010
  • Samstag, 23. Oktober 2010 ✗
  • Samstag, 23. Oktober 2010
  • BSON Samstag, 23. Oktober 2010
  • BInary Serialized jsON http://bsonspec.org/ Samstag, 23. Oktober 2010
  • Wire Samstag, 23. Oktober 2010
  • Storage Samstag, 23. Oktober 2010
  • rich queries Samstag, 23. Oktober 2010
  • conceptually close to SQL Samstag, 23. Oktober 2010
  • easy to grasp Samstag, 23. Oktober 2010
  • flexible Samstag, 23. Oktober 2010
  • language integration Samstag, 23. Oktober 2010
  • on top: map/reduce Samstag, 23. Oktober 2010
  • Scaling Samstag, 23. Oktober 2010
  • Master/Slave replication Samstag, 23. Oktober 2010
  • Replica Sets (1.6) Samstag, 23. Oktober 2010
  • Primary Member Member Samstag, 23. Oktober 2010
  • Primary Member Primary Samstag, 23. Oktober 2010
  • Member Member Primary Samstag, 23. Oktober 2010
  • Autosharding (1.6) Samstag, 23. Oktober 2010
  • Samstag, 23. Oktober 2010
  • Durability Samstag, 23. Oktober 2010
  • No single server durability! Samstag, 23. Oktober 2010
  • fsyncs every 60s (configurable) Samstag, 23. Oktober 2010
  • Use Replication! Samstag, 23. Oktober 2010
  • Use write propagation locking Samstag, 23. Oktober 2010
  • Single Server Durability planned for 1.8 Samstag, 23. Oktober 2010
  • mongo console Samstag, 23. Oktober 2010
  • $ mongo Samstag, 23. Oktober 2010
  • > 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
  • > 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
  • Indexing Samstag, 23. Oktober 2010
  • Same concept as with SQL databases Samstag, 23. Oktober 2010
  • You want them Samstag, 23. Oktober 2010
  • Same concept as with SQL databases Samstag, 23. Oktober 2010
  • Sort order Samstag, 23. Oktober 2010
  • Unique Samstag, 23. Oktober 2010
  • Compound Samstag, 23. Oktober 2010
  • Geospatial Samstag, 23. Oktober 2010
  • map/reduce Samstag, 23. Oktober 2010
  • we can haz it, too Samstag, 23. Oktober 2010
  • function() { this.tags.forEach(function(z) { emit(z, {count: 1}); }); } Samstag, 23. Oktober 2010
  • function(key, values) { var total = 0; values.forEach(function(v) { total += v.count }); return {count: total} } Samstag, 23. Oktober 2010
  • (it‘s not fast...) Samstag, 23. Oktober 2010
  • security Samstag, 23. Oktober 2010
  • simple user/password auth Samstag, 23. Oktober 2010
  • per database Samstag, 23. Oktober 2010
  • read only is possible Samstag, 23. Oktober 2010
  • one more thing Samstag, 23. Oktober 2010
  • GridFS Samstag, 23. Oktober 2010
  • Binary fields in BSON < 4MB Samstag, 23. Oktober 2010
  • GridFS saves files in chunks Samstag, 23. Oktober 2010
  • I‘m in u‘r rubies, querying teh MongoDB! Samstag, 23. Oktober 2010
  • core driver Samstag, 23. Oktober 2010
  • mongo / bson_ext Samstag, 23. Oktober 2010
  • ODMs / Libs Samstag, 23. Oktober 2010
  • mongo_mapper Samstag, 23. Oktober 2010
  • mongoid Samstag, 23. Oktober 2010
  • Find examples here: http://github.com/halfbyte/mongo_ruby_examples Samstag, 23. Oktober 2010
  • Basic driver usage Samstag, 23. Oktober 2010
  • init Samstag, 23. Oktober 2010
  • require 'mongo' @connection = Mongo::Connection.new @db = @connection.db("test") Samstag, 23. Oktober 2010
  • @connection = Mongo::Connection.new( 'localhost', 27017, :pool_size => 5, :timeout => 20 ) Samstag, 23. Oktober 2010
  • @connection = Mongo::Connection.from_uri( "mongodb://localhost:27017/test" ) Samstag, 23. Oktober 2010
  • insert/upsert Samstag, 23. Oktober 2010
  • 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
  • doc = @db['quotes'].find_one(id) doc[:from] = "Yogi Berra, famous baseball player" @db['quotes'].save(doc) Samstag, 23. Oktober 2010
  • atomic updates Samstag, 23. Oktober 2010
  • @db['quotes'].update( {"from" => "Yogi Berra"}, {"$inc" => {"reads" => 1 } } ) Samstag, 23. Oktober 2010
  • @db['quotes'].update( {"from" => "Yogi Berra"}, {"$inc" => {"reads" => 1 } } ) Samstag, 23. Oktober 2010
  • $inc $addToSet $set $pop $unset $pull $push $pullAll $pushAll $ Samstag, 23. Oktober 2010
  • getting a whole collection Samstag, 23. Oktober 2010
  • @db['quotes'].find.each do |row| puts row.inspect end Samstag, 23. Oktober 2010
  • exact query Samstag, 23. Oktober 2010
  • @db['quotes'].find(:from => "Yogi Berra") Samstag, 23. Oktober 2010
  • more queries Samstag, 23. Oktober 2010
  • 100.times do |i| db['numbers'].insert({"i" => i}) end Samstag, 23. Oktober 2010
  • db['numbers'].find("i" => {"$lt" => 2}) Samstag, 23. Oktober 2010
  • $lt < $gt > $lte <= $gte >= $ne != Samstag, 23. Oktober 2010
  • @db['people'].find(:tags => {"$in" => ['cool']}) Samstag, 23. Oktober 2010
  • 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
  • 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
  • $in IN (2,3,4) $nin NOT IN $all [2,3] ~ [1,2,3] Samstag, 23. Oktober 2010
  • $mod yah, RLY $size okay $exists NOT NULL $type huh? Samstag, 23. Oktober 2010
  • @db['people'].find("address.city" => /haven/) Samstag, 23. Oktober 2010
  • @db['people'].find("address.city" => /haven/) Samstag, 23. Oktober 2010
  • Sorting Samstag, 23. Oktober 2010
  • @db['people'].find().sort("address.street") Samstag, 23. Oktober 2010
  • @db['people'].find().sort("address.street") Samstag, 23. Oktober 2010
  • Pagination Samstag, 23. Oktober 2010
  • @db['numbers'].find.sort("i").limit(10) Samstag, 23. Oktober 2010
  • @db['numbers'].find.sort("i").limit(10).skip(50) Samstag, 23. Oktober 2010
  • Counting Samstag, 23. Oktober 2010
  • @db['numbers'].find.count Samstag, 23. Oktober 2010
  • Distinct Samstag, 23. Oktober 2010
  • @db['people'].distinct('tags').inspect Samstag, 23. Oktober 2010
  • Group Samstag, 23. Oktober 2010
  • Poor mans map/reduce Samstag, 23. Oktober 2010
  • @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010
  • @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010
  • @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010
  • @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010
  • @db['people'].group( ['created_at'], {}, {:tags => {}}, reduce, finalize ) Samstag, 23. Oktober 2010
  • 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
  • {"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
  • {"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
  • 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
  • {"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
  • Map / Reduce Samstag, 23. Oktober 2010
  • map = <<-END function() { this.tags.forEach(function(z) { emit(z, {count: 1}); }); } END reduce = <<-END function(key, values) { var total = 0; values.forEach(function(v) { total += v.count }); return {count: total} } END collection = @db['people'].map_reduce( map, reduce ) Samstag, 23. Oktober 2010
  • Indexes Samstag, 23. Oktober 2010
  • db['people'].create_index("tags") @db['people'].create_index( [["tags", Mongo::ASCENDING]] ) db['people'].drop_index("tags_1") db['people'].drop_indexes db['people'].index_information Samstag, 23. Oktober 2010
  • Geospatial stuff Samstag, 23. Oktober 2010
  • @db['people'].create_index( [["latlng", Mongo::GEO2D]] ) Samstag, 23. Oktober 2010
  • @db['people'].find( "latlng" => {"$near" => [53.593978, 10.107380]} ) Samstag, 23. Oktober 2010
  • GridFS usage Samstag, 23. Oktober 2010
  • grid = Mongo::Grid.new(@db) id = grid.put("You can put Strings in here", :filename => 'test.txt') file = grid.get(id) file.filename file.read grid.delete(id) grid.put( File.open("/Users/jankrutisch/Dropbox/Photos/IMGP8989.jpg") ) Samstag, 23. Oktober 2010
  • fs = Mongo::GridFileSystem.new(db) fs.open("test.txt", "w") do |f| f.write "You can put stuff in here" end fs.open("test.txt", "r") do |f| puts f.read end fs.delete("test.txt") Samstag, 23. Oktober 2010
  • Capped collections Samstag, 23. Oktober 2010
  • @db.create_collection('capped_numbers', :capped => true, :max => 50 ) @db.create_collection('capped_numbers', :capped => true, :size => 1024 * 64 ) Samstag, 23. Oktober 2010
  • explain Samstag, 23. Oktober 2010
  • @db['people'].find( "address.city" => /haven/ ).explain Samstag, 23. Oktober 2010
  • @db['people'].find( "address.city" => /haven/ ).explain Samstag, 23. Oktober 2010
  • { "cursor"=>"BasicCursor", "nscanned"=>1000, "nscannedObjects"=>1000, "n"=>39, "millis"=>2, "indexBounds"=>{}, "allPlans"=>[ {"cursor"=>"BasicCursor", "indexBounds"=>{}} ] } Samstag, 23. Oktober 2010
  • { "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
  • ODMs Samstag, 23. Oktober 2010
  • mongo_mapper Samstag, 23. Oktober 2010
  • John Nunemaker @jnunemaker Samstag, 23. Oktober 2010
  • is in production Samstag, 23. Oktober 2010
  • documentation? Samstag, 23. Oktober 2010
  • Samstag, 23. Oktober 2010
  • how to Samstag, 23. Oktober 2010
  • rails initializer Samstag, 23. Oktober 2010
  • # 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
  • a simple example Samstag, 23. Oktober 2010
  • MongoMapper.connection = @connection MongoMapper.database = "test" class Quote include MongoMapper::Document key :from key :text key :views, Integer timestamps! end Samstag, 23. Oktober 2010
  • finders Samstag, 23. Oktober 2010
  • Quote.where(:from => 'Yogi Berra').all Quote.where(:from => 'Yogi Berra').limit(5).sort(:from.desc).all Samstag, 23. Oktober 2010
  • embedded docs Samstag, 23. Oktober 2010
  • Samstag, 23. Oktober 2010
  • 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
  • person = Person.first address = Person.first.address Samstag, 23. Oktober 2010
  • scopes Samstag, 23. Oktober 2010
  • class Person scope :tagged, lambda { |tag| where(:tags.in => [tag]) } end puts Person.tagged('cool').first.inspect Samstag, 23. Oktober 2010
  • new website coming soon Samstag, 23. Oktober 2010
  • mongoid Samstag, 23. Oktober 2010
  • Durran Jordan (of Hashrocket) Samstag, 23. Oktober 2010
  • Two major versions Samstag, 23. Oktober 2010
  • 1.x (1.9.x) targeting Rails 2.3.x Samstag, 23. Oktober 2010
  • 2.x (2.0beta) targeting Rails 3.0 Samstag, 23. Oktober 2010
  • Good documentation Samstag, 23. Oktober 2010
  • Samstag, 23. Oktober 2010
  • rails initializer Samstag, 23. Oktober 2010
  • 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
  • a simple example Samstag, 23. Oktober 2010
  • class Quote include Mongoid::Document include Mongoid::Timestamps field :from field :text field :views, :type => Integer end Samstag, 23. Oktober 2010
  • finders Samstag, 23. Oktober 2010
  • Quote.where(:from => 'Yogi Berra').all Quote.where(:from => 'Yogi Berra').limit(5).order_by(:from.desc).all Samstag, 23. Oktober 2010
  • embedded docs Samstag, 23. Oktober 2010
  • 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
  • person = Person.first address = Person.first.address Samstag, 23. Oktober 2010
  • scopes Samstag, 23. Oktober 2010
  • class Person scope :tagged, lambda { |tag| where(:tags.in => [tag]) } end puts Person.tagged('cool').first.inspect Samstag, 23. Oktober 2010
  • More features Samstag, 23. Oktober 2010
  • atomic updates Samstag, 23. Oktober 2010
  • mongoid tries to be clever Samstag, 23. Oktober 2010
  • (using the „dirty“ flags) Samstag, 23. Oktober 2010
  • (it‘s probably better to bypass the ODM sometimes) Samstag, 23. Oktober 2010
  • GridFS Samstag, 23. Oktober 2010
  • external libraries for both Samstag, 23. Oktober 2010
  • mongo_mapper > grip Samstag, 23. Oktober 2010
  • mongoid > mongoid_grid Samstag, 23. Oktober 2010
  • Other noteworthy libraries Samstag, 23. Oktober 2010
  • Other not so noteworthy libraries Samstag, 23. Oktober 2010
  • I Samstag, 23. Oktober 2010
  • thanks for listening. ‣ http://www.mongodb.org/ ‣ http://www.mongoid.org/ ‣ http://github.com/jnunemaker/mongo_mapper ‣ http://github.com/halfbyte/mongo_ruby_examples ‣ jan@krutisch.de ‣ http://jan.krutisch.de/ ‣ http://github.com/halfbyte/ ‣ http://twitter.com/halfbyte ‣ http://www.mindmatters.de/ Samstag, 23. Oktober 2010