Як згадувалося в інших відповідях, MongoDB не дозволяє $
або .
символи як ключі карти через обмеження імен полів . Однак, як згадувалося в " Операторі знаків долара", уникнення цього обмеження не заважає вам вставляти документи з такими ключами, воно просто заважає вам оновлювати або запитувати їх.
Проблема простої заміни .
на [dot]
або U+FF0E
(як згадувалося десь на цій сторінці) полягає в тому, що відбувається, коли користувач законно хоче зберегти ключ [dot]
чи U+FF0E
?
Підхід, який використовує драйвер afMorphia від Fantom , полягає у використанні послідовностей вхідного коду Unicode, схожих на послідовності Java, але забезпечення того, щоб спершу було введено символ втечі. По суті, виконуються такі заміни рядків (*):
\ --> \\
$ --> \u0024
. --> \u002e
Змінна заміна проводиться, коли ключі карти згодом зчитуються з MongoDB.
Або в коді Fantom :
Str encodeKey(Str key) {
return key.replace("\\", "\\\\").replace("\$", "\\u0024").replace(".", "\\u002e")
}
Str decodeKey(Str key) {
return key.replace("\\u002e", ".").replace("\\u0024", "\$").replace("\\\\", "\\")
}
Користувач повинен знати про такі перетворення єдиний раз, коли створює запити для таких ключів.
З огляду на те, що це звичайно зберігати dotted.property.names
в базах даних для цілей конфігурації, я вважаю, що такий підхід є кращим, ніж просто заборона всіх таких ключів карти.
(*) afMorphia насправді виконує повні / належні правила уникнення Unicode, як згадується в синтаксисі Unicode escape в Java, але описана послідовність заміни працює так само добре.