J'utilise MongoDB Atlas comme base de données.
J'utilise angular4 avec loopback comme api.
Mon application se connecte bien à ma base de données. Cependant, lorsque j'essaie d'obtenir des données, j'obtiens cette erreur (j'ai remplacé mon nom de base par nom de base):
MongoError: user is not allowed to do action [find] on [dbname.$cmd]
La requête fonctionne correctement si j'utilise un client mongodb local ou une instance de mongodb sur AWS. Cependant, lorsque j'utilise atlas, j'obtiens cette erreur.
J'ai eu la même erreur moi-même.
Si vous utilisez la version 3.0 du pilote MongoDB NodeJS, reportez-vous à MikaS post pour connaître les modifications à apporter à MongoClient.connect. https://stackoverflow.com/a/47662979/8775223
Pour connecter votre application à Atlas MongoDB, utilisez le pilote 3.4, par exemple.
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
Dans le cluster Atlas, sélectionnez l’onglet Security
, appuyez sur le bouton Edit
puis ajoutez un rôle readWriteAnyDatabase
à l’utilisateur. Réessayez ou actualisez votre connexion pour voir le résultat.
Si vous utilisez la version 3.0 mongodb pour Node.js, vous devez utiliser la nouvelle API comme suit et la chaîne de connexion MongoDB Atlas URI pour le pilote 3.4 et les versions antérieures:
MongoClient.connect(uri, function(err, client) {
console.log("Connected successfully to server");
const db = client.db(dbName);
});