2011-01-14 122 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(); 

});