title: Use optional keys or a catch-all key in MongoMapper?
body: <p>Suppose I'm working on a MongoMapper class that looks like this:</p>
  
  <pre><code>class Animal
      include MongoMapper::Document
  
      key :type, String, :required =&gt; true
      key :color, String
      key :feet, Integer
  end
  </code></pre>
  
  <p>Now I want to store a bird's wingspan. Would it be better to add this, even though it's irrelevant for many documents and feels a bit untidy:</p>
  
  <pre><code>    key :wingspan, Float
  </code></pre>
  
  <p>Or this, even though it's an indescriptive catch-all that feels like a hack:</p>
  
  <pre><code>    key :metadata, Hash
  </code></pre>
  
  <p>It seems like the :metadata approach (for which there's precedent in the code I'm inheriting) is almost redundant to the Mongo document as a whole: they're both intended to be schemaless buckets of key-value pairs.</p>
  
  <p>However, it also seems like adding animal-specific keys is a slippery slope to a pretty ugly model.</p>
  
  <p>Any alternatives (create a Bird subclass)?</p>