web-dev-qa-db-ja.com

MongoDBエラー:「コマンド」readModeを使用できず、「レガシー」モードに低下します

そのため、mongoを使用してプロジェクトを開発していましたが、コードの実行後にエラーが発生しました:db.usercollection.insert({ "username" : "testuser1", "email" : "[email protected]" })

表示されたエラーは次のとおりです。

Cannot use 'commands' readMode, degrading to 'legacy' mode WriteResult({
        "writeError" : {
                "code" : 13,
                "errmsg" : "not authorized on watersheds to execute command { insert: \"usercollection\", documents: [ { _id: ObjectId('568d0eda45d472b121116bef'), username: \"testuser1\", email: \"[email protected]\" } ], ordered: true }"
        } })

Db.version()は3.0.7で、MongoDBシェルをインストールしました。バージョンは3.2.0です。

これをどのように修正すればよいですか?

よろしく、ダリル

7
dgnebres
db.getCollection(collectionName).count({});
db.getCollection(collectionName).find({});

できます!多分mongoは他の操作が必要です。

3
Geraint

代わりにmongodプロセスを再起動するだけで、うまくいきます。

2
harryssuperman

上記の@Buzutのコメントを拡張しています...

私はちょうどこれと同じエラーに遭遇しました。私にとっての問題は、ローカルで実行されているクライアントとクラウドで実行されているmongodbのバージョンの違いでした。

それが問題かどうかを確認するには、ローカルで_mongo --version_を実行し、バージョン番号をメモします。次に、mongo db Shellに接続し、db.version()を実行してそこでバージョンを確認します。

これらの数値に大きな違いがある場合(バージョン3クライアントとバージョン2 dbなど)、dbバージョンに近いクライアントバージョンに切り替える必要がある可能性があります。

これを行うには、Mongoダウンロードセンターにアクセスします: https://www.mongodb.com/download-center#production

プラットフォームを選択し、[すべてのバージョンのバイナリ]をクリックして、ホストされているデータベースに一致するダウンロードを探します。

これにより、解凍する必要のある圧縮ファイルがダウンロードされます。そしてその中にはフォルダがあります。/bin/mongo実行可能ファイル(そのフォルダー内)へのパスを使用して、mongoコマンドを実行するだけです。例えば:

_/path/to/downloads/mongodb-osx-x86_64-2.6.9/bin/mongo <whatever mongo commands you want>_

お役に立てば幸いです。

1
Malcolm Diggs

あなたがreplica setを持っていて、Primary dbを失った犠牲者であるかどうかはわかりません。
その場合は、プライマリを再作成するか、挿入する前にこのコマンドを使用してください。

db.getMongo().setSlaveOk();
0
Amir