MongoError: listCollections failed

MongoError: listCollections failed

我已经建立了一个 mongo 数据库,它与身份验证一起使用。

我正在尝试使用 mongodb native driver 复制数据库。


问题是我的命令被拒绝为:

MongoError: listCollections failed: { ok: 0.0, errmsg: "not authorized on SESSION to execute command { listCollections: 1, filter: { $or: [ { type: "collection" }, { type: { $exists: false } } ] }, cu...", code: 13, codeName: "Unauthorized" }

这是我 运行 我的数据库的方式:

/usr/bin/mongod --quiet
                --setParameter authenticationMechanisms=SCRAM-SHA-1
                --auth
                --port 27017
                --dbpath /database

这是我用来连接的用户

  db.createUser({
      "user": "USER",
      "pwd": "PASS",
      "roles": [ "root" ]
  });

我也试过使用:

  db.createUser({
      "user": "USER",
      "pwd": "PASS",
      "roles": [ { "role": "root", "db": "admin" } ]
  });

这是我的连接方式(连接成功):

const url = "mongodb://USER:PASS@172.42.0.2:27017/SESSION?authSource=admin";

MongoClient.connect(url, ...

这是我请求副本的方式:

const mongoCommand = {
     copydb: 1,
     fromhost: "172.42.0.2",
     fromdb: "SESSION",
     todb: "SESSION_COPY",
};

// Perform the copy
this.db.admin().command(mongoCommand, function (err, data) {

我正在使用:

Mongodb (database) v3.4.7
Mongodb (node package) v2.2.31

谢谢:)


一些帮助我度过难关的帖子:

mongodb-not-authorized-for-query-admin-system-users

好的,首先,这是 copydb command mongodb documentation

我们可以看到,在使用 fromhost 的情况下,您需要指定 usernamenoucekey.


解决方案

如果要在同一主机上复制数据库:不要使用 fromhost.

示例

const mongoCommand = {
    copydb: 1,
    fromdb: "SESSION",
    todb: "SESSION_SAVE",
};

如果要使用不同主机复制数据库:使用 usernamenoncekey here is how you create them.