Wie verbinde ich mich mit node.js mit mongodb (und authentifiziere mich)?

75

Wie verbinde ich mich mit node.js mit mongodb?

Ich habe den Node-Mongodb-Native-Treiber.

Es gibt anscheinend 0 Dokumentation.

Ist es so etwas?

var mongo = require('mongodb/lib/mongodb'); 
var Db= new mongo.Db( dbname, new mongo.Server( 'mongolab.com', 27017, {}), {}); 

Wo lege ich den Benutzernamen und das Passwort ab?

Wie füge ich auch etwas ein?

Vielen Dank.

Kennzeichen
quelle
1
Gute Startpunkte christiankvalheim.com und github.com/christkv/node-mongodb-native Das heißt, ich arbeite an den richtigen Dokumenten, während wir für die Version 1 des Treibers sprechen, der die erste offiziell unterstützte 10gen-Version sein wird.
Christkv

Antworten:

43

Laut Quelle :

Nach dem Anschließen:

Db.authenticate(user, password, function(err, res) {
  // callback
});
Chris Heald
quelle
6
Ich kann nicht glauben, dass diese Antwort so sehr mit Syntaxfehlern bewertet wurde ... der Rückruf ist schlecht definiert. Siehe meine Lösung und passenderen Quelllink
mattdlockyer
Ich habe es zuerst versucht und es hat nicht funktioniert, aber das liegt daran, dass ich es falsch verwendet habe. Ich habe die Anmeldeinformationen meiner Benutzer in admin verwendet. Ich habe einen Benutzer speziell für die Datenbank erstellt und diese Anmeldeinformationen verwendet. Lief wie am Schnürchen. Vielen Dank!
Robert Broden
Db hat ab Treiberversion 3.1 keine Authentifizierungsmethode mehr. mongodb.github.io/node-mongodb-native/3.1/api/Db.html
toadead
37

Jeder sollte diesen Quelllink verwenden:

http://mongodb.github.com/node-mongodb-native/contents.html

Antwort auf die Frage:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    ReplSetServers = require('mongodb').ReplSetServers,
    ObjectID = require('mongodb').ObjectID,
    Binary = require('mongodb').Binary,
    GridStore = require('mongodb').GridStore,
    Code = require('mongodb').Code,
    BSON = require('mongodb').pure().BSON,
    assert = require('assert');

var db = new Db('integration_tests', new Server("127.0.0.1", 27017,
 {auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false});

// Establish connection to db
db.open(function(err, db) {
  assert.equal(null, err);

  // Add a user to the database
  db.addUser('user', 'name', function(err, result) {
    assert.equal(null, err);

    // Authenticate
    db.authenticate('user', 'name', function(err, result) {
      assert.equal(true, result);

      db.close();
    });
  });
});
mattdlockyer
quelle
6
Warum würden Sie den Benutzer immer zur Datenbank hinzufügen?
Bruno Nery
Dies ist ein Beispiel, das aus dem von mir geposteten Link zum Treiberhandbuch kopiert wurde. Die Verbindungsmethode ist der nützliche Teil.
Mattdlockyer
Nur zur Information, in der Hoffnung, dass das jemandem helfen kann. Dies funktioniert nicht, weil null != {}und diese Überprüfung fehlschlägt:assert.equal(null, err);
Daniele Vrut
Vielleicht ist das manuelle Beispiel jetzt veraltet und es gibt eine neuere Version von Mongo, danke für die Info!
Mattdlockyer
14
var mongo = require('mongodb');
var MongoClient = mongo.MongoClient;    
MongoClient.connect('mongodb://'+DATABASEUSERNAME+':'+DATABASEPASSWORD+'@'+DATABASEHOST+':'DATABASEPORT+'/'+DATABASENAME,function(err, db){  
      if(err) 
        console.log(err);
      else
      {
        console.log('Mongo Conn....');

      }
    });
//for local server 
//in local server DBPASSWOAD and DBusername not required
MongoClient.connect('mongodb://'+DATABASEHOST+':'+DATABASEPORT+'/'+DATABASENAME,function(err, db){  
      if(err) 
        console.log(err);
      else
      {
        console.log('Mongo Conn....');

      }
    });
Virales Patel
quelle
perfekt ... danke ... du hast gerade den Verkettungsoperator '@' + DATABASEHOST + 'verlassen:' + DATABASEPORT @Viral Patel
Prashant
9

Ich finde es praktisch, eine Mongo-URL zu verwenden. Ich speichere die URL in einer Umgebungsvariablen und konfiguriere damit Server, während die Entwicklungsversion eine Standard-URL ohne Kennwort verwendet.

Die URL hat die Form:

export MONGODB_DATABASE_URL=mongodb://USERNAME:PASSWORD@DBHOST:DBPORT/DBNAME

Code zum Verbinden auf diese Weise:

var DATABASE_URL = process.env.MONGODB_DATABASE_URL || mongodb.DEFAULT_URL;

mongo_connect(DATABASE_URL, mongodb_server_options, 
      function(err, db) { 

          if(db && !err) {
          console.log("connected to mongodb" + " " + lobby_db);
          }
          else if(err) {
          console.log("NOT connected to mongodb " + err + " " + lobby_db);
          }
      });    
justinhj
quelle
1
Wenn sich der Benutzer in einer anderen Datenbank als DBNAME befindet (z. B. admin), müssen Sie die Optionen ?authSource=adminzur URL hinzufügen .
Getz
7

Meine Version:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://user:pass@dhost:port/baseName', function(err, db) {
    if (err) {
        console.error(err);
    }
    var collection = db.collection('collectionName');
    collection.find().toArray(function(err, docs) {
        console.log(docs);
    });
});
VK
quelle
4

Ich empfehle Mongoskin, das ich gerade erstellt habe.

var mongo = require('mongoskin');
var db = mongo.db('admin:pass@localhost/mydb?auto_reconnnect');
db.collection('mycollection').find().toArray(function(err, items){
   // do something with items
});

Ist Mongoskin synchron? Nein, es ist asynchron.

guilin 桂林
quelle
3

Das hat bei mir funktioniert:

Db.admin().authenticate(user, password, function() {} );
jwchang
quelle
Funktioniert nicht mit neueren Versionen des Treibers. Die Methode db.authenticate () existiert nicht mehr. Zumindest ist es in dem von mir verwendeten node.js 3.1-Treiber nicht vorhanden. Ich erhalte den Fehler "db.authenticate ist keine Funktion" in der Node Inspector-Konsole.
David Edwards
3

Hier ist eine neue Möglichkeit, sich von "admin" zu authentifizieren und dann für weitere Vorgänge zu Ihrer gewünschten Datenbank zu wechseln:

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

var user = 'user';
var password = 'password';

MongoClient.connect('mongodb://'+user+':'+password+'@localhost:27017/opsdb',{native_parser:true, authSource:'admin'}, function(err,db){
    if(err){
        console.log("Auth Failed");
        return;
    }
    console.log("Connected");
    db.collection("cols").find({loc:{ $eq: null } }, function(err, docs) {
        docs.each(function(err, doc) {
          if(doc) {
            console.log(doc['_id']);
          }
        });
    });

    db.close();

}); 
lustig
quelle
1
Das ist nur der Verbindungsname für db.
lustiger
2

Sie können es so machen

var db = require('mongo-lite').connect('mongodb://localhost/test')

mehr Details ...

Alex Craft
quelle
Ich liebe diese Bibliothek. Elemente einige Rückrufe. Noch besser als Mongo-Haut
Aaron Shafovaloff
1

Mit dem von @mattdlockyer als Referenz bereitgestellten Link funktionierte dies für mich:

var mongo = require('mongodb');
var server = new mongo.Server(host, port, options);
db = new mongo.Db(mydb, server, {fsync:true});
db.open(function(err, db) {
    if(!err) {
        console.log("Connected to database");
        db.authenticate(user, password, function(err, res) {
            if(!err) {
                console.log("Authenticated");
            } else {
                console.log("Error in authentication.");
                console.log(err);
            }
        });
    } else {
        console.log("Error in open().");
        console.log(err);
    };
});

exports.testMongo = function(req, res){
    db.collection( mycollection, function(err, collection) {
        collection.find().toArray(function(err, items) {
            res.send(items);
        });
    });
};
RVC
quelle
0

Leichter Tippfehler mit Chris 'Antwort.

Db.authenticate(user, password, function({ // callback }));

sollte sein

Db.authenticate(user, password, function(){ // callback } );

Abhängig von Ihrer Mongodb-Konfiguration müssen Sie möglicherweise zuerst eine Verbindung zum Administrator herstellen und dort authentifizieren, bevor Sie zu einer anderen Datenbank wechseln können. Dies ist der Fall, wenn Sie der Datenbank, auf die Sie zugreifen möchten, keinen Benutzer hinzufügen. Dann können Sie über admin authentifizieren und dann die Datenbank wechseln und dann nach Belieben lesen oder schreiben.

Earlonrails
quelle
-2

Ich benutze Mongoose, um mich mit Mongodb zu verbinden. Installieren Sie mongoose npm mit dem folgenden Befehl

npm Mungo installieren

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/database_name', function(err){
    if(err){
        console.log('database not connected');
    }
});
var Schema = mongoose.Schema;
var userschema = new Schema ({});
var user = mongoose.model('collection_name', userschema);

Wir können die Abfragen so verwenden

user.find({},function(err,data){
         if(err){
         console.log(err);
         }
        console.log(data);
    });
vamsikrishnamannem
quelle