11

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

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

(类似于 npm 在沙发上做事的方式)

问题是,当我更新 MongoDB 时,我发现它不允许在键名中使用点(由于点符号存在),导致我的代码失败。在研究了这一点之后,我能发现的是,您需要在存储到数据库之前将点转换为其他字符,然后在访问时再次将它们转换回来。真的没有更好的方法来解决这个问题吗?

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

4

2 回答 2

4

您可以使用带有东西的版本集合吗?

喜欢:

{
    "versions":
    [
              {
                   "version_num": "1.2.3",
                   "stuff": { stuff }
              },
              {
                   "version_num": "1.2.4",
                   "stuff": { stuff }
              }
    ]
}
于 2012-07-19T01:29:00.263 回答
2

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

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

于 2012-07-19T01:33:46.010 回答