Relacional a la base de datos NoSQL

Esta pregunta es para todos los expertos de NoSQL y especialmente de mongoDB. Comencé diseñando una base de datos relacional para un proyecto, pero el cliente quiere que usemos una base de datos que pueda escalar fácilmente. Para lograr esto, hemos decidido usar mongoDB. En estos días tengo problemas para mapear mi modelo relacional para NoSQL. Tengo una tabla de usuarios que tiene una relación de muchos a muchos con muchas otras tablas como se ilustra a continuación:

Tengo algunas opciones al convertirlo para mongoDB:

Opción 1 (con filas completas en usuarios):

users:{
  _id:<user_id>,
  battles:{[battle1, battle2, ...]},
  items:{[item1, item2, ...]},
  locations:{[location1, location2, ...]},
  units:{[unit1, unit2, ...]},
}

battles:{
  <battle_info>
}

locations:{
  <location_info>
}

units:{
  <units_info>
}

items:{
  <items_info>
}

Opción2 (con solo claves foráneas en los usuarios):

users:{
  _id:<user_id>,
  battles:{[battle1_id, battle2_id, ...]},
  items:{[item1_id, item2_id, ...]},
  locations:{[location1_id, location2_id, ...]},
  units:{[unit1_id, unit2_id, ...]},
}

battles:{
  <battle_info>
}

locations:{
  <location_info>
}

units:{
  <units_info>
}

items:{
  <items_info>
}

Opción 3 (ID de usuario en otras tablas):

users:{
  _id:<user_id>,
}

battles:{
  <battle_info>,
  user:{[user1_id, user2_id, ...]}
}

locations:{
  <location_info>,
  user:{[user1_id, user2_id, ...]}
}

units:{
  <units_info>,
  user:{[user1_id, user2_id, ...]}
}

items:{
  <items_info>,
  user:{[user1_id, user2_id, ...]}
}

Option 1 tiene mucha duplicación ya que estamos agregando filas completas de otras tablas. Un problema que veo en esto es que si se actualiza un determinado elemento o batalla, tendremos que encontrar todos los casos en la tabla de usuarios y actualizarlos también. Pero esto nos da la ventaja de tener siempre un objeto de usuario completo que se puede entregar a la aplicación del cliente al momento de iniciar sesión.

Option 2 es más relacional donde solo tenemos mongoIds de otras tablas en la tabla de usuarios. La ventaja de estas opciones es que actualizar una batalla o un artículo no tiene mucho costo ya que las filas se referencian y no se copian. Por otro lado, cuando el usuario inicie sesión, tendremos que encontrar todas las unidades, batallas, elementos y ubicaciones a las que se hace referencia para responder con un objeto de usuario completo.

Option 3 es opuesto a la opción 2, donde los mongoIds de la tabla de usuarios se mantienen en otras tablas. Esta opción no me atrae mucho.

Realmente agradecería que alguien pueda guiarme o proponer un modelo mejor.

Editar

Básicamente este es un juego de mmorpg donde las aplicaciones de varios clientes se conectarán al servidor a través de servicios web. Tenemos una base de datos local en el cliente para almacenar datos. Quiero un modelo a través del cual el servidor pueda responder con un objeto de usuario completo y luego actualizar o insertar datos modificados en las aplicaciones cliente.

Respuestas a la pregunta(4)

Su respuesta a la pregunta