web-dev-qa-db-fra.com

MongoError: l'utilisateur n'est pas autorisé à effectuer une action

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.

6
Janpan

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
    
7
kostjakon

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.

3
aviit

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);
});
1
itacode