Как указать имя пользователя и пароль mongodb с помощью экземпляра сервера?

Документация MongoClient показывает, как использовать экземпляр сервера для создания соединения:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server;

// Set up the connection to the local db
var mongoclient = new MongoClient(new Server("localhost", 27017));

Как бы вы указали для этого имя пользователя и пароль?

Ответ 1

Есть два разных способа сделать это

# 1

Документация (Обратите внимание, что в примере в документации используется объект Db)

// Your code from the question

// Listen for when the mongoclient is connected
mongoclient.open(function(err, mongoclient) {

  // Then select a database
  var db = mongoclient.db("exampledatabase");

  // Then you can authorize your self
  db.authenticate('username', 'password', function(err, result) {
    // On authorized result=true
    // Not authorized result=false

    // If authorized you can use the database in the db variable
  });
});

# 2

Документация MongoClient.connect
Документация URL
Мне нравится гораздо больше, потому что он меньше и легче читать.

// Just this code nothing more

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://username:[email protected]:27017/exampledatabase", function(err, db) {
  // Now you can use the database in the db variable
});

Ответ 2

Спасибо Маттиасу за правильный ответ.

Я хотел бы добавить, что иногда у вас есть учетные данные из одной базы данных, а вы хотите подключиться к другой. В этом случае вы все равно можете использовать способ URL для подключения, просто добавив параметр ?authSource= в URL.

Например, скажем, у вас есть учетные данные администратора из базы данных admin и хотите подключиться к базе данных mydb. Вы можете сделать это следующим образом:

const MongoClient = require('mongodb').MongoClient;

(async() => {

    const db = await MongoClient.connect('mongodb://adminUsername:[email protected]:27017/mydb?authSource=admin');

    // now you can use db:
    const collection = await db.collection('mycollection');
    const records = await collection.find().toArray();
    ...

})();

Кроме того, если ваш пароль содержит специальные символы, вы все равно можете использовать способ URL следующим образом:

    const dbUrl = `mongodb://adminUsername:${encodeURIComponent(adminPassword)}@localhost:27017/mydb?authSource=admin`;
    const db = await MongoClient.connect(dbUrl);

Примечание. В более ранних версиях параметр { uri_decode_auth: true } был необходим (как второй параметр для метода connect) при использовании encodeURIComponent для имени пользователя или пароля, однако теперь этот параметр устарел, он отлично работает без него.