MongoDB从3.2转储,恢复为3.4,错误索引safe = null

时间:2016-12-08 09:54:40

标签: mongodb mongodump mongorestore

我收到以下错误(转储MongoDB 3.2)(恢复MongoDB 3.4):

BOTH

看起来安全索引为空。但是我如何在MongoDB 3.4中使用它? 3.2没关系。

5 个答案:

答案 0 :(得分:53)

safe=true不是索引规范。

在早期版本的MongoDB中,低于3.4,可以添加额外的索引规范。那些被特定的司机使用。

在3.4中,mongodb对索引规范进行了验证:

  

Ensuring that the specified index options are valid. Previous versions ignored invalid options.

这就是您遇到此错误的原因。 我担心您需要确保3.2版本中的索引没有无效的索引规范,然后再执行mongodump。

正如kz_sergey在他的回答中所说,你可以mongorestore使用--noIndexRestore,这应该可以正常工作。

答案 1 :(得分:23)

为什么要恢复索引? --noIndexRestore并再次创建它们。

答案 2 :(得分:3)

根据Aymeric的评论精神,您可以使用此awk单行代替" safe" .metadata.json文件中的属性。

awk -i inplace '{gsub(",\"safe\":null", ""); print}' *.metadata.json

答案 3 :(得分:0)

find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;

答案 4 :(得分:0)

由于我想保留所有索引,并且上述方法都不适用于我的情况,因此我刚刚编辑了所有 *.metadata.json 文件并手动删除了所有出现的 "safe":true

上下文:我使用的是无法升级到 4.x 或更高版本的旧数据库 - 它最初在 3.2 上运行,但没有在配备 Apple Silicon 的新 Mac 上运行 mongo 版本,因此我不得不使用 3.4 (可用的第一个版本)并从旧 Mac 转储并从新 Mac 恢复。