2011-01-14 93 views
61

如何使用node.js连接到mongodb?如何使用node.js连接到mongodb(并进行身份验证)?

我有节点mongodb本地驱动程序。

显然有0个文档。

是这样的吗?

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

我在哪里输入用户名和密码?

另外我该如何插入东西?

感谢。

+0

开始的好地方http://christiankvalheim.com/和https:// github上。 com/christkv/node-mongodb-native这就是说,我正在为正确的文档工作,因为我们为驱动程序的v1版本发布这将是第一个官方支持的10gen版本。 – christkv 2012-01-18 16:11:16

回答

40

the source

连接后:

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

我收到“auth failed”错误。 – 2011-06-28 21:42:34

+3

我不敢相信这个答案因语法错误而得到了很大的回报......回调不明确。看到我的解决方案和更合适的源代码链接如下:http://stackoverflow.com/a/15191273/1060487 – mattdlockyer 2013-03-03 21:46:50

+0

我第一次尝试这个,它没有工作,但那是因为我用它错了。我在管理员中使用我的用户的凭据。我专门为数据库创建了一个用户并使用了这些凭证。像魅力一样工作。谢谢! – 2016-08-02 17:30:33

3

我推荐mongoskin我刚刚创建。

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是否同步? Nop,它是异步的。

3

这为我工作:

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

你可以像下面这样做

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

more details ...

+0

喜欢这个图书馆。元素一些回调。即使比mongo-skin更合适 – 2013-05-15 22:45:54

0

与克里斯的回答轻微错字。

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

应该

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

还取决于你的MongoDB的配置,您可能需要连接到管理和AUTH那里第一次去到不同的数据库之前。如果您没有将用户添加到您尝试访问的数据库中,情况就会如此。然后你可以通过管理员身份验证,然后切换数据库,然后随意读或写。

7

我发现使用Mongo url方便。我将URL存储在一个环境变量中,并使用它来配置服务器,而开发版本使用没有密码的默认URL。

的URL的形式:

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

如果用户在DBNAME而不是DBNAME(如admin)中,则必须在URL中添加选项`?authSource = admin`。 – Getz 2016-11-09 10:57:50

30

每个人都应该使用这个源链接:

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

问题的答案

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

代码以这种方式连接:

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

与@mattdlockyer作为参考提供的链接,这个工作对我来说:

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

我用猫鼬连接到MongoDB的。 使用以下命令

NPM安装猫鼬NPM安装猫鼬

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

我们可以使用查询,这样

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

我的版本:

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

这里是新的,从5月将“admin”身份验证,然后切换到所需的数据库进行进一步操作:

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

}); 
相关问题