Mongoツールのmongodumpを使用して、サーバーのバックアップをダウンロードしています。しかし、コマンドを実行すると、コマンドは「認識できないフィールド 'スナップショット'」を返します。
完全なエラーは次のとおりです。
Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'.
Mongodump --versionは次を返します:
mongodump version: built-without-version-string
git version: built-without-git-spec
Go version: go1.7.3
os: linux
Arch: AMD64
compiler: gc
OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
バージョンをダウングレードする必要がありますか?そうでなければ、ここからどこへ行くべきかわからない...
確かに、mongodumpとご使用のmongoDBサーバーのバージョンには違いがあります(3.6と4.0)。
あなたはdockerを使って救うことができます:
docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump -h server -d $database --out /workdir/dump/
Dockerを使用すると、インストールせずに正確なバージョンのツールcliを使用できます。
別名(.bashrc内)を指定することもできます。
alias mongodump="docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump"
注:コンテナー内のmongodbユーザーがマウントされたボリュームに書き込むことができるように、ダンプが保存されるフォルダーには書き込み権限が必要です。これは、上記のコマンドを実行する前に、ダンプフォルダーのアクセス許可を手動で設定することで実現できます。
上記の例では、mkdir -m 777 dump
になります。ダンプが完了した後、アクセス許可を通常に戻すことができます(つまり、Sudo chmod 755 dump
)。
追加 --forceTableScan
例:
mongodump --forceTableScan -d database_name -o target_directory
http://aug2uag.blogspot.com/2018/08/mongoexport-unrecognized-field-snapshot.html
私のCentOSでも、mongodbがユーザー名とパスワードで認証される以下の仕様で同じ問題に直面していました
以下のコマンドを使用しました:
mongodump --forceTableScan -h <mongo database where it is hosted> -u <username> -d <databasename> -o /<output directory>/
プロンプトが表示されたら、mongodbパスワードを入力しました。
デフォルトでは、mongodumpは_idインデックスを使用して、そのインデックスでコレクションをスキャンできる場合(たとえば、ビューにインデックスがない場合)を使用します。 -forceTableScanを指定すると、mongodumpは_idインデックスを使用せずにコレクションデータをスキャンします。
詳細については、この link を参照してください。