我的Mongo数据库几乎没有带有自定义名称的索引,因为其中有太多字段无法自动生成名称,而不会出现“ns name too long”错误。
当我尝试使用mongorestore从备份中还原该数据库时–失败,并出现此错误(“ns名称太长,最大大小为128”)。似乎mongorestore尝试根据其内容生成索引名,而不是仅还原数据库中实际使用的任何名称。
到目前为止,我想到的唯一解决方案是将mongorestore与--noIndexRestore结合使用,然后手动重新创建所有索引,但这显然是一个糟糕的方法。有没有更好的方法来解决这个问题?
我在MongoDB 2.4.1中遇到此问题。
谢谢。
最佳答案
在重新创建转储期间存在的索引时,mongorestore
使用相同的名称。您可以在2.2及更高版本中查看这些名称在.metadata.json文件中的名称,在2.2之前,这些名称位于.system.indexes.bson文件中(该文件位于BSON中,因此您可以使用bsondump
命令对其进行检查)。
我发现出现此错误的一种方法是,如果要还原到其他名称的数据库或集合中,并且新名称的长度比原始名称或名称的长度长。如果您使用原始数据库名称和集合名称,则将使用原始索引名称(自定义或默认),然后它将是合法名称。
关于mongodb - Mongorestore:ns名称太长,最大大小为128,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15773726/