Mongodump和mongorestore;字段未找到

时间:2012-05-23 02:11:48

标签: mongodb database

我正在尝试从另一台服务器转储数据库(这很好),然后在新服务器上恢复它(这不能正常工作)。

我先跑:

mongodump --host -d

这将创建一个文件夹dump/db,其中包含所有bson文档。

然后在dump文件夹中,我正在运行:

mongorestore -d dbname db

这可以工作并遍历文件,但我在dbname.system.users

上收到此错误
Wed May 23 02:08:05 { key: { _id: 1 }, ns: "dbname.system.users", name: "_id_" }
Error creating index dbname.system.usersassertion: 13111 field not found, expected type 16

有任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:9)

如果它的版本不同,请使用--noIndexRestore选项。然后创建所有索引。

答案 1 :(得分:7)

源和目的地是否有不同的版本?

在任何情况下,要解决此问题,请使用-c标志单独还原集合到目标数据库,然后再构建索引。系统集合是用于索引的系统集合,因此它很容易重新创建 - 一旦其他所有内容都被还原就会再次尝试,如果它仍然失败,您可以随时重新创建相关索引。

答案 2 :(得分:3)

这个问题也可能是由旧版Mongo中的这个错误导致的(在我看来是2.0.8):

https://jira.mongodb.org/browse/SERVER-7181

基本上,如果它实际上提示您输入身份验证详细信息,则会出现13111 field not found, expected type 16错误。

我如何解决它的例子:

root@precise64:/# mongorestore /backups/demand/ondemand.05-24-2013T114223/
connected to: 127.0.0.1
[REDACTED]
Fri May 24 11:48:15      going into namespace [test.system.indexes]
Fri May 24 11:48:15 { key: { _id: 1 }, ns: "test.system.users", name: "_id_" }
Error creating index test.system.usersassertion: 13111 field not found, expected type 16
# Error when not giving username and password

root@precise64:/# mongorestore -u fakeuser -p fakepassword /backups/demand/ondemand.05-24-2013T114223/
connected to: 127.0.0.1
[REDACTED]
Fri May 24 11:57:11 /backups/demand/ondemand.05-24-2013T114223/test/system.users.bson
Fri May 24 11:57:11      going into namespace [test.system.users]
1 objects found
# Works fine when giving username and password! :)

希望帮助任何问题的人不会被之前的2个回复修复!

答案 3 :(得分:0)

如果您尝试将mongorestore迁移到MongoDB 2.6+中,并且您尝试还原的转储在除admin之外的任何数据库中都包含system.users表,也会发生这种情况。在MongoDB 2.2和2.4中,system.users集合可以出现在任何数据库中。与MongoDB 2.6相关联的身份验证模式迁移将所有用户移动到admin数据库中的system.users表中,但是留在其他数据库中的system.users表中(MongoDB 2.6忽略了这些)。这似乎在导入MongoDB 2.6时会导致这种断言。