ruby-on-railsrubyjsonmongodbmongomapper

Ruby and MongoDB: Traversing arbitrary BSON document retrieved from mongomapper


In Ruby, how can I traverse an arbitrary document retrieved from a collection using something like mongomapper? Let's say the document looks something like this:

mydocs = [{
    "title": "my title",
    "description": "hello world",
    "comments": [{
      "user": "me",
      "text": "this"
    }, {
      "user": "him",
      "text": "that"
    }]
  },
  {
    .....
  }
]

Solution

  • def traverse(obj, level=0, name='root')
      s =  "  "*level + name.to_s + ": "
      if obj.is_a?(Array)
        puts s
        obj.each_with_index{ |child,idx| traverse(child,level+1,idx) }
      elsif obj.is_a?(Hash)
        puts s
        obj.each{ |k,v| traverse(v,level+1,k) }
      else
        puts s + obj.inspect
      end
    end
    
    traverse mydocs