MongoDB Atlasをデータベースとして使用しています。
私はapiとしてloopbackでangular4を使用しています。
アプリケーションはデータベースに正常に接続します。ただし、データを取得しようとすると、次のエラーが表示されます(dbnameをdbnameに置き換えました)。
MongoError: user is not allowed to do action [find] on [dbname.$cmd]
AWSでローカルmongodbクライアントまたはmongodbインスタンスを使用している場合、クエリは正常に機能します。ただし、アトラスを使用すると、このエラーが発生します。
私自身も同じエラーがありました。
MongoDB NodeJSドライバーのv.3.0を使用している場合、行う必要があるMongoClient.connectの変更については、MikaSの投稿を参照してください。 https://stackoverflow.com/a/47662979/877522
アプリケーションをAtlas MongoDBに接続するには、3.4ドライバーを使用します。
mongodb://<USERNAME>:<PASSWORD>@cluster0-shard-00-00-
rb899.mongodb.net:27017,cluster0-shard-00-01-
rb899.mongodb.net:27017,cluster0-shard-00-02-
rb899.mongodb.net:27017/<DBNAME>?ssl=true&replicaSet=Cluster0-shard-
0&authSource=admin
Atlasクラスターで、[Security
]タブを選択し、ボタン[Edit
を押してから、ロールreadWriteAnyDatabase
をユーザーに追加します。再試行するか、接続を更新して結果を確認してください。
うん!これは修正に時間がかかりすぎました!同じ問題を抱えている人のために。私は両方をしなければなりませんでした:
1>このエラーが発生しました。問題は、接続文字列をコピーするときにデータベース名を「test」から自分のデータベースに変更しなかったことです。 –マイヤー17年12月8日12:43で
2>
「mongodb://:@ cluster0-shard-00-00- rb899.mongodb.net:27017,cluster0-shard-00-01- rb899.mongodb.net:27017,cluster0-shard-00-02- rb899.mongodb .net:27017 /?ssl = true&replicaSet = Cluster0-shard- 0&authSource = admin "
また、Atlasでは、古いドライバー2.2.12以降を指定する必要があります。これらのことを行った後、最終的に機能しました。
皆さんありがとう!
Node.jsにv3.0 mongodbを使用している場合は、次のように新しいAPIを使用し、ドライバー3.4以前ではMongoDB Atlas URI接続文字列を使用する必要があります。
MongoClient.connect(uri, function(err, client) {
console.log("Connected successfully to server");
const db = client.db(dbName);
});