title: Play: How to transform JSON while writing/reading it to/from MongoDB
body: <p>Here is an simple JSON I want to write/read to/from MongoDB:</p>
  
  <pre><code>{
    "id": "ff59ab34cc59ff59ab34cc59",
    "name": "Joe",
    "surname": "Cocker"
  }
  </code></pre>
  
  <p>Before storing it in MongoDB, <code>"ff59ab34cc59ff59ab34cc59"</code> has to be transformed into an <code>ObjectID</code> and <code>id</code> renamed to <code>_id</code>... so given the following <code>Reads</code>, how do I achieve that?</p>
  
  <pre><code>val personReads: Reads[JsObject] = (
    (__ \ 'id).read[String] ~ // how do I rename id to _id AND transform "ff59ab34cc59ff59ab34cc59" to an ObjectID?
    (__ \ 'name).read[String] ~
    (__ \ 'surname).read[String]
  ) reduce
  </code></pre>
  
  <p>And of course, I also need the contrary for my <code>Writes</code>, i.e. renaming <code>_id</code> to <code>id</code> and transforming an <code>ObjectID</code> to plain text in the format <code>"ff59ab34cc59ff59ab34cc59"</code>.</p>