Ci sono alcune alternative:
1. Sostituisci punti con un trattino.
Questo sarebbe il mio approccio preferito, in quanto mantiene la struttura abbastanza esplicita.
Poiché secondo te "è praticamente un inserimento una tantum", dovrebbe essere relativamente semplice controllare se non si rompe nulla (cioè c'è già una stessa chiave con un trattino). Per altre situazioni, eseguire tali controlli a livello di programmazione richiede di scrivere del codice, ma è ancora un compito relativamente facile.
Vorrei strongmente sconsigliare questo approccio, poiché porterebbe a massivo mal di testa per il debug lungo la strada . Lasciare qualcuno che usa il JSON risultante da qualche parte nel codice lontano da MongoDB per indovinare che un punto non è proprio un punto è un buon modo per sprecare letteralmente settimane del tempo di qualcuno. Tieni questi trucchi Unicode agli hacker che vogliono indurre qualcuno a pensare che un personaggio sia diverso.
3. Usa BSON.
Dal momento che affermi che "per lo più recuperi l'intero documento piuttosto che eseguire query per parti di esso", questo approccio non presenta grossi inconvenienti nel tuo caso . Anche se hai detto "principalmente", il che significa che a volte, recupererai solo parti del documento.
In generale, lo svantaggio è che non potrai cercare nel documento o caricarne solo una parte.
4. Utilizza una codifica standard, come Base64.
La conversione delle chiavi problematiche (o di tutte le chiavi, a seconda del rapporto tra problematiche e non problematiche) su Base64 o esadecimale potrebbe essere una soluzione praticabile, con il vantaggio di essere piuttosto esplicita: la maggior parte degli sviluppatori riconoscerebbe i valori Base64 o esadecimali a colpo d'occhio.
Lo svantaggio è l'aumento dell'impronta di memoria, oltre alla necessità di codificare e decodificare le chiavi quando li si usa.
Vorrei strongmente sconsigliare questo approccio, dato che renderebbe la query dei dati ambigua e sprecare ore o giorni cercando di capire perché una query specifica non fa ciò che si immagina dovrebbe essere facendo. Dot è un personaggio riservato e il controllo è qui per proteggerti; dicendo a MongoDB di saltare l'assegno, rimanderai solo il momento in cui dovrai affrontare un conflitto tra la sintassi di MongoDB e il carattere riservato usato in una chiave.