Wie in anderen Antworten erwähnt MongoDB nicht erlaubt $
oder .
Zeichen als Mapkeys wegen Beschränkungen für Feldnamen . Wie in Dollar Sign Operator erwähnt. Wenn Sie dieser Einschränkung jedoch entkommen, können Sie keine Dokumente mit solchen Schlüsseln einfügen , sondern sie nur aktualisieren oder abfragen.
Das Problem beim einfachen Ersetzen .
durch [dot]
oder U+FF0E
(wie an anderer Stelle auf dieser Seite erwähnt) ist, was passiert, wenn der Benutzer den Schlüssel rechtmäßig speichern möchte [dot]
oder U+FF0E
?
Ein Ansatz, den der afMorphia-Treiber von Fantom verfolgt , besteht darin, Unicode-Escape-Sequenzen zu verwenden, die denen von Java ähnlich sind, aber sicherzustellen, dass das Escape-Zeichen zuerst maskiert wird. Im Wesentlichen werden die folgenden Zeichenfolgen ersetzt (*):
\ --> \\
$ --> \u0024
. --> \u002e
Ein umgekehrter Austausch erfolgt, wenn die Kartenschlüssel anschließend aus MongoDB gelesen werden .
Oder im Fantomcode :
Str encodeKey(Str key) {
return key.replace("\\", "\\\\").replace("\$", "\\u0024").replace(".", "\\u002e")
}
Str decodeKey(Str key) {
return key.replace("\\u002e", ".").replace("\\u0024", "\$").replace("\\\\", "\\")
}
Ein Benutzer muss sich solcher Konvertierungen nur bewusst sein, wenn er Abfragen für solche Schlüssel erstellt.
Da es üblich ist, zu dotted.property.names
Konfigurationszwecken in Datenbanken zu speichern , ist dieser Ansatz meines Erachtens dem einfachen Verbot aller dieser Kartenschlüssel vorzuziehen.
(*) afMorphia führt tatsächlich vollständige / ordnungsgemäße Unicode-Escape- Regeln aus, wie in der Unicode-Escape-Syntax in Java erwähnt, aber die beschriebene Ersetzungssequenz funktioniert genauso gut.