Как мне обрабатывать точки в именах ключей MongoDB?

Я разрабатываю эту часть программного обеспечения в Node и MongoDB, в которой я по существу хочу хранить версии пакетов со следующей структурой:

{
    "versions":
    {
        "1.2.3": { stuff }
    }
}

(аналогично тому, как npm делает вещи на кушетке)

Проблема в том, что когда я обновлял MongoDB, я обнаружил, что он не разрешает точки в именах ключей (из-за существующей нотации точек), что приводит к сбою моего кода. Изучив это, все, что я мог найти, это то, что вам нужно преобразовать точки в какой-то другой символ перед сохранением в db, а затем преобразовать их обратно при доступе. Нет ли лучшего способа справиться с этим?

Если этого не происходит, как я могу сделать это преобразование без копирования данных на другой ключ и удаления оригинала?

Ответ 1

В настоящее время ограничения на размер шрифта приводятся в действие драйвером, и не все драйверы предотвратили точки с именами полей с самого начала. Вы можете написать код исходного кода, чтобы делать всевозможные сумасшедшие вещи в Монго, включая использование действительно странных символов в именах коллекций.

Вам будет намного лучше, если вы очистите это (возможно, замените точки на - или какой-либо другой допустимый символ), но будет трудно сделать это хорошо с любой интеллектуальной фильтрацией. Вам, скорее всего, придется перебирать всю коллекцию, изменять значения в вашем приложении и затем перезаписывать все поля "версии" в вашем документе. На месте перезаписываемые данные должны быть достаточно быстрыми, поскольку они не будут изменять размер документа и, вероятно, не изменят никаких индексов.

Ответ 2

Можете ли вы использовать коллекцию версий с материалами?

Как

{
    "versions":
    [
              {
                   "version_num": "1.2.3",
                   "stuff": { stuff }
              },
              {
                   "version_num": "1.2.4",
                   "stuff": { stuff }
              }
    ]
}