2011-01-14 15 views
61

Come posso connettermi a mongodb con node.js?Come connettersi a mongodb con node.js (e autenticarsi)?

Ho il driver nativo-mongodb-nodo.

C'è apparentemente 0 documentazione.

È qualcosa del genere?

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

Dove inserisco nome utente e password?

Anche come inserisco qualcosa?

Grazie.

+0

buoni punti di partenza http://christiankvalheim.com/ e https: // GitHub. com/christkv/node-mongodb-native Detto questo, sto lavorando a documenti appropriati mentre parliamo per la versione v1 del driver, che sarà la prima versione 10gen supportata ufficialmente. – christkv

risposta

40

Per the source:

Dopo il collegamento:

Db.authenticate(user, password, function(err, res) { 
    // callback 
}); 
+1

Viene visualizzato un errore "auth fail". –

+3

Non riesco a credere che questa risposta sia stata svuotata così tanto con errori di sintassi ... il callback è mal definito. Vedere la mia soluzione e il link sorgente più appropriato di seguito: http://stackoverflow.com/a/15191273/1060487 – mattdlockyer

+0

ho provato prima questo e non ha funzionato, ma perché lo stavo usando male. Stavo usando le credenziali dei miei utenti in admin. Ho creato un utente appositamente per il database e ho usato quelle credenziali. Ha funzionato come un fascino. Grazie! –

3

Mi raccomando mongoskin Ho appena creato.

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

È mongoskin sync? Nop, è asincrono.

3

questo ha funzionato per me:

Db.admin().authenticate(user, password, function() {}); 
2

si può fare in questo modo

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

more details ...

+0

Amo questa libreria. Elementi alcuni richiami. Anche un adattamento migliore di mongo-skin –

0

Lieve errore di battitura con la risposta di Chris'.

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

dovrebbe essere

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

anche a seconda della configurazione MongoDB, potrebbe essere necessario per la connessione a admin e autenticazione per primi prima di andare a un database diverso. Questo sarà il caso se non aggiungi un utente al database a cui stai tentando di accedere. Quindi è possibile eseguire l'autenticazione tramite admin e quindi passare a db e quindi leggere o scrivere a piacere.

7

Trovo utile utilizzare un URL Mongo. Conservo l'URL in una variabile di ambiente e lo utilizzo per configurare i server mentre la versione di sviluppo utilizza un URL predefinito senza password.

L'URL ha la forma:

export MONGODB_DATABASE_URL=mongodb://USERNAME:[email protected]:DBPORT/DBNAME 

codice per la connessione in questo modo:

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); 
      } 
     });  
+1

Se l'utente si trova in un db diverso da DBNAME (come admin), è necessario aggiungere le opzioni '? AuthSource = admin' all'URL. – Getz

30

Tutti dovrebbero usare questa Fonte:

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

risposta alla domanda :

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(); 
    }); 
    }); 
}); 
+3

Perché dovresti sempre aggiungere l'utente al database? –

+0

Questo è un esempio, copiato dal collegamento del driver manuale che ho postato ... il metodo di connessione è la porzione utile. – mattdlockyer

+0

Solo per informazione, sperando che possa aiutare qualcuno .. Questo non funziona, a causa di 'null! = {}' E questo controllo fallisce: 'assert.equal (null, err);' –

1

Con il link fornito da @mattdlockyer come riferimento, questo ha funzionato per me:

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); 
     }); 
    }); 
}; 
-1

sto usando Mangusta per connettersi a MongoDB. Installare mangusta npm usando seguente comando

npm installare mangusta

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); 

possiamo utilizzare le query come questo

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

La mia versione:

var MongoClient = require('mongodb').MongoClient; 
MongoClient.connect('mongodb://user:[email protected]:port/baseName', function(err, db) { 
    if (err) { 
     console.error(err); 
    } 
    var collection = db.collection('collectionName'); 
    collection.find().toArray(function(err, docs) { 
     console.log(docs); 
    }); 
}); 
10
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....'); 

     } 
    }); 
+0

perfetto ... grazie ... hai appena lasciato l'operatore di concatenazione '@' + DATABASEHOST + ':' + DATABASEPORT @Viral Patel – Prashant

0

Ecco nuova maggio per l'autenticazione da "admin" e quindi passare al vostro DB desiderato per ulteriori operazioni:

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(); 

}); 
Problemi correlati