我如何处理MongoDB键名中的点?

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

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

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

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

如果没有,我怎么能做这个转换没有复制到另一个键的数据和删除原来的?

点限制目前是驱动程序强制执行的,并不是所有的驱动程序都从一开始就阻止了字段名称中的点。 您可以编写原始协议代码,在Mongo中执行各种疯狂的东西,包括在集合名称中使用真正奇怪的字符。

如果你把这些东西清理干净,可能会好很多(可能用其他有效的字符代替点),但是用任何一种智能过滤都很难做到。 您很可能需要遍历整个集合,将应用程序中的值覆盖,然后覆盖文档中的整个“版本”字段。 因为他们不会调整文档的大小,所以覆盖这个应该是相当快的,并且可能不会改变任何索引。

你可以使用与东西的版本集合?

喜欢:

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