Clone database in Mongodb between hosts using node

2019-01-15 21:09发布

问题:

There are clone and copydb commands available in mongo shell, how to reach them in mongo node native driver(mongodb)?

That's what I have tried:

I discovered the db.command available in node native mongodb driver. Reading documentation I tried this piece of code (db is the destination db named 'newdb')

db = db.db('newdb');
db.addUser('newdbuser', 'newdbpass', {}, function (err) {
    err && console.log(err);
    console.log(authUrlForDb(config.MONGO_HOSTS));
    db.command({
        copydb: 1,
        fromhost: config.MONGO_HOSTS,
        fromdb: config.MOTHER_DB, // some database name
        todb: 'newdb',
        username: config.ADMIN_USERNAME,  //
        key: {
            username: config.ADMIN_USERNAME,
            password: config.ADMIN_PASSWORD
        }
    }, function (err, res) {
        console.log(config.MONGO_HOSTS);
        console.log(err, res);
        db.close();
    });
});

Which fails and logs this:

hostname1.host.io,hostname2.host.io
null { ok: 0, errmsg: 'access denied; use admin db' }

回答1:

Have you tried using db.admin().command?



回答2:

dude, you should essentially just try

use admin;

db.runCommand({
  copydb: 1,
  fromhost: "myhost",
  username:"azureuser",
  fromdb: "test",
  todb: "test"
})

All mongo asking for is the switch to "admin" db before running such a command, and then it will run fine.