Как мне обрабатывать точки в именах ключей 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 }
}
]
}