我收到以下错误(转储MongoDB 3.2)(恢复MongoDB 3.4):
BOTH
看起来安全索引为空。但是我如何在MongoDB 3.4中使用它? 3.2没关系。
答案 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 恢复。