Hay algunas alternativas:
1. Reemplace los puntos por un guión.
Este sería mi enfoque favorito, ya que mantiene la estructura lo suficientemente explícita.
Dado que, según usted, "es una inserción casi única", debería ser relativamente simple verificar si no rompe nada (es decir, ya hay una misma clave con un guión). Para otras situaciones, hacer esas comprobaciones mediante programación requiere escribir algo de código, pero sigue siendo una tarea relativamente fácil.
Aconsejaría encarecidamente este enfoque, ya que conduciría a dolores de cabeza de depuración masiva en el futuro . Dejar que alguien que usa el JSON resultante en algún lugar del código, lejos de MongoDB, adivine que un punto no es realmente un punto es una buena manera de perder literalmente semanas del tiempo de alguien. Mantenga esos trucos Unicode para los hackers que quieren engañar a alguien para que piense que un personaje es diferente.
3. Use BSON.
Como usted afirma que "en su mayoría recuperaría el documento completo en lugar de consultar partes del mismo", este enfoque no tiene inconvenientes importantes en su caso . Sin embargo, usted dijo "en su mayoría", lo que significa que a veces, solo recuperará partes del documento.
En general, el inconveniente es que no podrá buscar en el documento ni cargar solo una parte del mismo.
4. Use una codificación estándar, como Base64.
Convertir las claves problemáticas (o todas las claves, dependiendo de la relación entre las problemáticas y las no problemáticas) a Base64 o hexadecimal podría ser una solución viable, con el beneficio de ser bastante explícito: la mayoría de los desarrolladores reconocerían los valores de Base64 o hexadecimal de un vistazo .
El inconveniente es el aumento de la huella de memoria, así como la necesidad de codificar y decodificar las teclas cuando se usan.
Aconsejaría encarecidamente este enfoque, ya que esto haría que la consulta de datos fuera ambigua y desperdiciara horas o días tratando de descubrir por qué una consulta específica no hace lo que imaginaba que debería estar haciendo. Dot es un personaje reservado y el cheque está aquí para protegerlo; Al decirle a MongoDB que omita la comprobación, solo pospondrá el momento en que tendrá que lidiar con un conflicto entre la sintaxis de MongoDB y el carácter reservado utilizado en una clave.