Es gibt einige Alternativen:
1. Ersetzen Sie die Punkte durch einen Bindestrich.
Dies wäre mein Lieblingsansatz, da dadurch die Struktur explizit genug bleibt.
Da es Ihrer Meinung nach „so ziemlich eine einmalige Einfügung ist“, sollte es relativ einfach sein, zu überprüfen, ob nichts kaputt geht (dh es gibt bereits denselben Schlüssel mit einem Bindestrich). In anderen Situationen erfordert das programmgesteuerte Durchführen dieser Überprüfungen das Schreiben von Code, ist jedoch immer noch eine relativ einfache Aufgabe.
Ich würde dringend von diesem Ansatz abraten, da dies zu massiven Debugging-Kopfschmerzen führen würde . Es ist eine gute Möglichkeit, jemanden, der den resultierenden JSON irgendwo im Code weit weg von MongoDB verwendet, zu erraten, dass ein Punkt nicht wirklich ein Punkt ist, buchstäblich Wochen der Zeit eines anderen zu verschwenden. Behalten Sie solche Unicode-Tricks für die Hacker, die jemanden dazu verleiten wollen, zu glauben, dass ein Charakter ein anderer ist.
3. Verwenden Sie BSON.
Da Sie behaupten, dass Sie "meistens das gesamte Dokument abrufen würden, anstatt Teile davon abzufragen", hat dieser Ansatz in Ihrem Fall keine wesentlichen Nachteile . Obwohl Sie "meistens" gesagt haben, bedeutet dies, dass Sie manchmal nur Teile des Dokuments abrufen.
Im Allgemeinen besteht der Nachteil darin, dass Sie das Dokument nicht durchsuchen oder nur einen Teil davon laden können.
4. Verwenden Sie eine Standardcodierung, z. B. Base64.
Das Konvertieren der problematischen Schlüssel (oder aller Schlüssel, abhängig vom Verhältnis zwischen problematischen und unproblematischen) in Base64 oder Hexadezimal könnte eine praktikable Lösung sein, mit dem Vorteil, dass sie ziemlich explizit sind: Die meisten Entwickler würden Base64- oder Hexadezimalwerte auf einen Blick erkennen .
Der Nachteil ist der erhöhte Speicherbedarf sowie die Notwendigkeit, die Schlüssel bei ihrer Verwendung zu codieren und zu decodieren.
Ich würde dringend von diesem Ansatz abraten, da dies die Datenabfrage mehrdeutig machen und Stunden oder Tage damit verschwenden würde, herauszufinden, warum eine bestimmte Abfrage nicht das tut, was Sie sich vorgestellt haben. Punkt ist ein reservierter Charakter und der Scheck ist hier, um Sie zu schützen; Wenn Sie MongoDB anweisen, die Prüfung zu überspringen, verschieben Sie nur den Moment, in dem Sie sich mit einem Konflikt zwischen der Syntax von MongoDB und dem in einem Schlüssel verwendeten reservierten Zeichen befassen müssen.