mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶
1)使用mongodb连接mongo
var mongo = require('mongodb'), //引入mongodb dbHost = '127.0.0.1', dbPort = 27017;//配置基本的信息 var Db = mongo.Db; var Connection = mongo.Connection; var Server = mongo.Server; var db = new Db ('local', new Server(dbHost, dbPort), {safe:true}); //初始化数据库对象 db.open(function(error, dbConnection){ if (error) { console.error(error); process.exit(1); } var item = { name:"haha" }; dbConnection.collection("aa").insert(item,function(error,item){ if(error) { console.error(error); process.exit(1); } console.log("inserted"); db.close(); process.exit(0); //向collection aa中插入一条数据(aa不存在的前提下会创建aa ) }); });
看见成功在collection aa中插入了我在程序中创建的数据
2)使用mongoskin连接mongo
/** * Created by hao on 2016/4/19. */ var mongoskin = require("mongoskin"), dbHost = "127.0.0.1", dbPort = 27017; var db = mongoskin.db(dbHost + ':' + dbPort + '/local',{safe:true}); //基本的数据库配置 db.bind("aa",{ findOneAndAddAge:function(age,fn) { db.collection("aa").findOne({},function(error,item){ if(error) { console.log(error); process.exit(1); } item.age = age; db.collection("aa").save(item,function(error,item){ if(error) { console.error(error); process.exit(1); } console.log("saved"); db.close(); }); }); } }); //为数据集合创建方法自定义方法 这里当数据库中不存在相应的集合的时候,下面调用绑定的方法会出错 对比mongodb的连接情况 db.collection("aa").findOneAndAddAge(22,function(){ console.log("changed"); });
修改了数据
tip:mongoskin是node.js原生驱动mongodb的子集 也就是你也可以像使用mongodb那样使用mongoskin
3)进阶连接数
/** * Created by hao on 2016/4/19. */ var server_options = {}; var db_options = { w:-1, logger:{ log:function(msg,obj){ console.log('[log]' + msg); } } }; //开启的 var mongodb = require("mongodb"), mongoserver = new mongodb.Server("localhost",27017,server_options), //根据server_options去初始化server db = new mongodb.Db('local',mongoserver,{safe:true}); function test(){ db.open(function(error,dbCollection){ if(error) { console.errro(error); process.exit(1); } dbCollection.collection("aa").insert({name:"hao"},function(error,item){ if(error) { console.error(error); process.exit(1); } console.log("inserted"); db.close(); }); }); } test();
在server_options中有个poolsize选项 默认值是5 db提供这个连接池 默认下每次请求过来会打开这个有5个连接的连接池,然后就关闭这个连接池,也就是每个请求过来都是打开5个连接然后在关闭5个连接
上面的模式存在着问题,当访问数激增的时候,就会出现之前的连接还没有关闭,后面来的请求要求打开这个还没有关闭的请求出现错误 可以切换下面这种模式 就是程序启动的时候就open数据库的连接 ,然后在操作之后不去关闭这个连接,但是这种模式存在着一定的问题,就是当并发访问数大的时候,可用的数据库数据库连接数只有5 会出现阻塞 解决方案是使用连接池对象模式
具体请参考这篇文章 关于连接数的思路都是从上面来的 https://cnodejs.org/topic/5190d61263e9f8a542acd83b mongodb驱动的正确使用方法
posted on 2016-04-19 16:30 icantunderstand 阅读(1217) 评论(0) 编辑 收藏 举报