如何处理MongoDB密钥名称中的点?

jli*_*jli 11 javascript mongodb node.js

我正在Node和MongoDB中开发这个软件,其中我基本上想要存储具有以下结构的软件包版本:

{
    "versions":
    {
        "1.2.3": { stuff }
    }
}
Run Code Online (Sandbox Code Playgroud)

(类似于npm如何在沙发上做事情)

问题是,当我更新MongoDB时,我发现它不允许键名中的点(由于点符号存在),导致我的代码失败.研究完之后,我所能找到的就是你需要在存储到数据库之前将点转换为其他字符,然后在访问时再将它们转换回来.有没有更好的方法来处理这个?

如果没有,如何在不将数据复制到另一个密钥并删除原始数据的情况下进行此转换?

MrK*_*urt 2

点限制当前由驱动程序强制执行,并非所有驱动程序从一开始就阻止字段名称中的点。您可以编写原始协议代码来在 Mongo 中执行各种疯狂的操作,包括在集合名称中使用非常奇怪的字符。

如果你清理它(可能用 - 或其他一些有效字符替换点),你的情况会好得多,但使用任何类型的智能过滤都很难做好。您很可能需要迭代整个集合,整理应用程序中的值,然后覆盖文档中的整个“版本”字段。就地覆盖这应该相当快,因为​​它们不会调整文档大小,并且可能不会更改任何索引。