MongoError:不允许用户执行操作

时间:2017-10-09 14:55:31

标签: mongodb angular loopback

我使用MongoDB Atlas作为我的数据库。

我正在使用angular4和loopi作为api。

我的应用程序很好地连接到我的数据库。但是,当我尝试获取数据时,我收到此错误(我已使用dbname替换了我的dbname):

MongoError: user is not allowed to do action [find] on [dbname.$cmd]

如果我在AWS上使用本地mongodb客户端或mongodb实例,则查询工作正常。但是,使用地图集时,我收到此错误。

8 个答案:

答案 0 :(得分:7)

我自己也有同样的错误。

  • 如果您使用的是MongoDB NodeJS驱动程序的v.3.0,请参阅MikaS帖子,了解需要进行的MongoClient.connect更改。 https://stackoverflow.com/a/47662979/8775223

  • 要将您的应用程序连接到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
    

答案 1 :(得分:3)

在Atlas群集中,选择Security标签,按下按钮Edit,然后向用户添加角色readWriteAnyDatabase。请重试或刷新连接以查看结果。

答案 2 :(得分:1)

如果您使用v3.0 mongodb作为Node.js,您应该使用以下新API,以及驱动程序3.4及更早版本的MongoDB Atlas URI连接字符串:

MongoClient.connect(uri, function(err, client) {
  console.log("Connected successfully to server");

  const db = client.db(dbName);
});

答案 3 :(得分:1)

U!这花费了太多时间来修复!对于那些有同样问题的人。我必须两者都做:

1>我遇到此错误,我的问题是,在处理连接字符串时,我没有将数据库名称从“ test”更改为自己的数据库。 – Meier 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或更高版本。完成这些操作后,它终于可以工作了。

谢谢!

答案 4 :(得分:0)

https://docs.mlab.com/troubleshooting-atlas-connection-issues/#getlog-error

对于任何人,都会遇到user is not allowed to do action [getLog] on [admin.]错误。必须明确赋予用户clusterMonitor角色

答案 5 :(得分:0)

我通过直接获取集合对象并对其执行查找(和其他操作)来解决这个问题:

try {
  mongoose.connect(MONGODB_URI, options)
  const db = mongoose.connection
  db.on("error", console.error.bind(console, "connection error:"))
  db.once("open", async () => {
    console.log("we're connected!")

    const collectionObj = db.collection(ATLAS_COLLECTION)

    const result = await collectionObj.find({}).toArray()
    console.log(result)
}) } catch (error) { console.log({ error }) }

答案 6 :(得分:0)

我遇到了同样的问题以及如何解决它: 确保添加正确的 MongoDB URL: .转到集群 - 连接 .选择“连接您的应用程序” .复制Url(不要忘记填写你的MongoDB密码)

答案 7 :(得分:-1)

确保将用于从Mongo CLI连接到数据库的IP列入白名单。在项目的“网络访问”选项卡下执行此操作。