Є кілька альтернатив:
1. Замініть крапки на тире.
Це був би мій улюблений підхід, оскільки він зберігає структуру досить чітко.
Оскільки, за вашими словами, "це досить багато часу одноразової вставки", перевірити, чи нічого вона не зламає (тобто вже є однаковий ключ із тире), слід порівняно просто. Для інших ситуацій робити ці перевірки програмно потрібно, щоб написати якийсь код, але це все ще відносно легке завдання.
Я б настійно не радив такому підходу, оскільки це призведе до масових налагоджуючих головних болів у дорозі . Дозволити тому, хто використовує отриманий JSON десь у коді далеко від MongoDB, здогадатися, що ця точка насправді не є крапкою, це хороший спосіб витрачати буквально тижні чийогось часу. Дотримуйтесь таких хитростей Unicode хакерам, які хочуть обдурити когось, думаючи, що персонаж - це інший.
3. Використовуйте BSON.
Оскільки ви стверджуєте, що "в основному отримаєте весь документ, а не запитуєте його частини", такий підхід у вашому випадку не має великих недоліків . Хоча, ви сказали "в основному", це означає, що іноді ви знайдете лише частини документа.
Загалом недоліком є те, що ви не зможете шукати документ або завантажувати лише його частину.
4. Використовуйте стандартне кодування, наприклад Base64.
Перетворення проблемних ключів (або всіх ключів, залежно від співвідношення між проблемними та непроблемними) в Base64 або шістнадцяткових може бути життєздатним рішенням, з користю бути досить явним: більшість розробників розпізнають Base64 або шістнадцяткові значення з першого погляду .
Недолік - збільшений слід пам'яті, а також необхідність кодування та декодування ключів при їх використанні.
Я настійно не рекомендую проти такого підходу, оскільки це зробить запит даних неоднозначним і витрачайте години чи дні, намагаючись з’ясувати, чому конкретний запит не робить те, що ви уявляли, що це має робити. Крапка - це зарезервований символ, і чек знаходиться тут, щоб захистити вас; сказавши MongoDB пропустити чек, ви лише відкладете той момент, коли вам доведеться мати справу з конфліктом між синтаксисом MongoDB та зарезервованим символом, який використовується в ключі.