Seperti yang disebutkan dalam jawaban lain, MongoDB tidak mengizinkan $
atau .
karakter sebagai kunci peta karena batasan pada nama bidang . Namun, seperti yang disebutkan dalam Dollar Sign Operator Escaping pembatasan ini tidak mencegah Anda memasukkan dokumen dengan kunci seperti itu, ini hanya mencegah Anda untuk memperbarui atau menanyakannya.
Masalah hanya .
dengan mengganti dengan [dot]
atau U+FF0E
(seperti yang disebutkan di tempat lain di halaman ini) adalah, apa yang terjadi ketika pengguna secara sah ingin menyimpan kunci [dot]
atau U+FF0E
?
Pendekatan yang diambil oleh pengemudi afMorphia dari Fantom , adalah dengan menggunakan urutan pelolosan unicode yang mirip dengan yang ada di Jawa, tetapi memastikan karakter pelolosan tersebut lolos terlebih dahulu. Intinya, penggantian string berikut dilakukan (*):
\ --> \\
$ --> \u0024
. --> \u002e
Penggantian terbalik dilakukan ketika kunci peta kemudian dibaca dari MongoDB.
Atau dalam kode Fantom :
Str encodeKey(Str key) {
return key.replace("\\", "\\\\").replace("\$", "\\u0024").replace(".", "\\u002e")
}
Str decodeKey(Str key) {
return key.replace("\\u002e", ".").replace("\\u0024", "\$").replace("\\\\", "\\")
}
Satu-satunya saat pengguna perlu menyadari konversi tersebut adalah saat membuat kueri untuk kunci tersebut.
Mengingat umum untuk menyimpan dotted.property.names
dalam database untuk tujuan konfigurasi, saya yakin pendekatan ini lebih disukai daripada hanya melarang semua kunci peta tersebut.
(*) afMorphia sebenarnya menjalankan aturan pelolosan unicode penuh / tepat seperti yang disebutkan dalam sintaks pelolosan Unicode di Java, tetapi urutan penggantian yang dijelaskan juga berfungsi dengan baik.