I tend to collapse update and create methods into one method called `ensure_<whatever>` and it ensures that whatever it is is up to date.  In this case you'd pass in the existing doc or `{}` when no existing doc was found.

Most of the logic you apply to existing doc would work for `{}` too.