Mongorestore: createIndex error: Values in v:2 index key pattern cannot be of type object. Only numbers > 0, numbers < 0, and strings are allowed

Mongorestore: createIndex error: Values in v:2 index key pattern cannot be of type object. Only numbers > 0, numbers < 0, and strings are allowed

当 运行 mongorestore 命令使用大型 MongoDB 数据库时,我收到以下错误。

完成备份的机器:

db version v4.2.0
git version: a4b751dcf51dd249c5865812b390cfd1c0129c30
OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1804
    distarch: x86_64
    target_arch: x86_64

本地机器版本(我执行的地方mongorestore

db version v4.0.10
git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

失败:prod.DeviceState:为 prod.DeviceState 创建索引时出错:createIndex 错误:v:2 索引键模式中的值不能是对象类型。只允许数字 > 0、数字 < 0 和字符串。

对解决这个问题有什么帮助吗?

谢谢

对于将来会来这里的人来说,问题是,我在本地使用 MongoDB 4.0,服务器在 4.2:

从 4.2 版开始,mongodump 对元数据文件使用扩展 JSON v2.0(规范)格式。要解析这些文件以进行还原,请使用支持 Extended JSON v2.0(Canonical 或 Relaxed 模式)格式的 mongorestore 4.2+ 版。 有关详细信息,请参阅有关此的 "Metadata Format" 部分:[docs.mongodb.com/manual/reference/program/mongodump][1]

来源:https://dba.stackexchange.com/questions/250312/failed-to-restored-indexes-using-mongorestore-mongodb

从 4.2 版开始,mongodump 对元数据文件使用扩展 JSON v2.0(规范)格式。要解析这些文件以进行还原,请使用支持扩展 JSON v2.0(规范或宽松模式)格式的 mongorestore 4.2+ 版。

Tip
If general, use corresponding versions of mongodump and mongorestore. That is, to restore data files created with a specific version of mongodump, use the corresponding version of mongorestore.

https://docs.mongodb.com/manual/reference/program/mongodump/#metadata-format

因此,您需要使用 v4.2.0

执行 mongorestore

或者,试试这个(保留 MongoDB 备份)

  1. 停止 Mongod v4.2.0
  2. 运行 Mongod v4.0.10(如果失败,继续下一步)
  3. mongodump 数据库 v4.0.10

其他技巧:

mongodump uses Extended JSON v2.0 (Canonical) format for the metadata files

  1. 启动mongod v4.0.10
  2. 创建所有集合+索引
  3. mongodump v4.0.10
  4. metadata files .json 转储 v4.2.0 替换为 v4.0.10
  5. 带有 v4.0.10 的 mongoestore 转储