8

我的 Mongo 数据库很少有自定义名称的索引,因为它们中的字段太多,无法自动生成名称而不会因“ns name too long”错误而失败。

当我尝试使用 mongorestore 从备份中恢复此数据库时 - 它失败并出现此错误(“ns 名称太长,最大大小为 128”)。似乎 mongorestore 试图根据它们的内容生成索引名称,而不是仅仅恢复数据库中实际使用的任何名称。

到目前为止,我想出的唯一解决方案是将 mongorestore 与 --noIndexRestore 一起使用,然后手动重新创建所有索引,但这显然是一种糟糕的方法。有没有更好的方法来解决这个问题?

我在使用 MongoDB 2.4.1 时遇到了这个问题。

谢谢。

4

1 回答 1

2

mongorestore在重新创建转储期间存在的索引时使用相同的名称。您可以在 2.2 及更高版本的 .metadata.json 文件中查看这些名称,在 2.2 之前,这些名称在 .system.indexes.bson 文件中(它在 BSON 中,因此您可以使用bsondump命令检查它)。

我发现您可能会收到此错误的一种方法是,如果您要恢复到不同名称的数据库或集合,并且新名称比原始名称长。如果您使用原始数据库名称和集合名称,将使用原始索引名称(自定义或默认),然后它将是合法名称。

于 2013-09-01T18:53:22.447 回答