在node中使用mongogb数据库
首先要安装mongodb模块:
npm install mongodb
连接MongoDB有两种方法:
- 通过实例化mongodb模块中提供的MongoClient类,然后使用这个实例化的对象来创建和管理mongodb连接;
- 使用字符串进行连接;
一、使用MongoClient
通过实例化一个MongoClient对象连接MongoDB数据库是最常用也是最佳的方式。
创建MongoClient对象实例的语法:
var client= new MongoClient(new Server('localhost',27017,{...},{...}));
参数解释:
- localhost: 主机名
- 27017: 默认连接端口号
- 第一个{…}: Server对象配置
- 第二个{…}: 数据库连接选项配置
可以看到MongoClient利用了后台的Server对象,这个对象的功能就是定义了MongoDB驱动程序怎么连接到服务器。
举个栗子:
var MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').server;
// 创建客户端连接对象
var client = new MongoClient( new Server(
'localhost',
27017,
{
socketOpations: { connectTimeoutMS: 500 },
poolSize: 5,
auto_reconnect: true
},
{
numberOfRetries: 3,
retryMilliSeconds: 500
}));
// 打开对服务器端MongoDB数据库的连接
client.open(function(err, client) {
if ( err ) {
console.log('连接失败!');
} else {
var db = client.db('blogdb'); // 建立到数据库blogdb的连接
if ( db ) {
console.log('连接成功');
db.authenticate('username', 'pwd', function(err, result) { // 对用户数据库身份进行验证
if ( err ) {
console.log('数据库用户身份验证失败');
client.close(); // 关闭对MongoDB的连接
console.log('连接已关闭......');
} else {
console.log('用户身份验证通过');
db.logout(function (err, result) { // 关闭对数据库的连接,即退出数据库
if ( !err ) {
console.log('退出数据库出错');
}
client.close(); // 关闭对MongoDB的连接
console.log( '已关闭连接......' );
});
}
});
}
}
});
注意: 要注销数据库,要使用数据库对象上的logout()方法。这将关闭到该数据库上的连接,你不在可以使用Db对象。例如: db.logout();而要关闭到MongoDB的连接,要在客户端连接上调用close()方法,例如: client.close()。
写入关注
首先,我们在连接数据库的时候会用到一个关于写入关注级别的问题,说白了,个人理解的话就是相当于出现问题的一个处理优先顺序,你可以选择写入数据库之前是否需要你确认之类的,或者发生错误是否忽略之类的等等,如下图:
来创建MongoClient连接的Server对象的选项,如下:
用来创建MongoClient连接的数据库连接选项,如下:
二、使用连接字符串
这种方式要调用MongoClient类的connect( )方法。connect使用语法如下:
MongoClient.connect(connString, options, callback)
connString字符串的语法如下:
mongodb://username:password@host:port/database?opations
MongoClient连接字符串组件:
举个栗子:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://mongodb:test@localhost:27017/blogdb', {
db: { w: 1, native_parser: false },
server: {
poolSize: 5,
socketOpations: { connectTimeoutMS: 500 },
auto_reconnect: true
},
replSet: {},
mongos: {}
}, function(err, db) {
if ( err ) {
console.log('连接失败!');
} else {
console.log('连接成功!');
// 注销数据库
db.logout(function(err, result) {
if ( err ) {
console.log('注销失败...');
}
db.close(); // 关闭连接
console.log('连接已经关闭!');
});
}
});