node.js中如何使用mongodb数据库
2016-04-06 21:06
661 查看
1 选择mysql还是mongodb:
如果你的业务通常能知道key,那么MongoDB是一个好选择,比如某游戏的玩家信息,这是很典型的NoSQL的应用场景。另外一点是mongodb可以存储多种数据类型,比如我们想存一个列表,在MySQL中就只能拼成字符串来存,但是NoSQL本身就支持列表,所以可以尽可能的保持数据结构。此外mongodb具有并发量大,可以集群,存储量大。但是他有千分之几的概率有写丢失。
mysql的强项是关系模型,在不知道主键的情况下,查询的灵活性和效率都能得到很好地优化,适合网站这类的应用,因为很难提前确定要根据某个条件进行查询,关系模型的表达能力是很强的。Mysql并发一般,适合查询。例如用户信息等重要数据可以用mongodb存储。
当然node.js开发中,redis用的也很多,redis是个强大的缓存组件,node出现之后,在与redis通讯时,不走原来的那种线程机制,而是走事件驱动,原来的IO瓶颈没有了,非常有利于提供高并发。
2 node.js中使用mongodb
mongodb简介:
①MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源的NoSQL数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能,相比MySQL那样的关系型数据库,它更显得轻巧、灵活,非常适合在数据规模很大、事务性不强的场合下使用。
②MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案;
③MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于
JSON对象。字段值可以包含其他文档,数组及文档数组。
安装好mongodb后,在安装目录下打开cmd,执行mongod --datapath=E:\mongodb\data,data是数据库的存储位置。在执行:mongo --host:127.0.0.1,启动mongodb数据库。
mongoose简介:
Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让Node.js操作Mongodb数据库变得更加灵活简单。
①集合collection和文档document:mongodb是一个对象数据库,所有数据以document存储,它是一个关联数组式的对象,内部由属性构成,相当于mysql中的一条记录,多个document组成collection,相当于mysql中一张表中的数据。
②Schema:一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架。定义一个Schema:
③Model:由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类。拥有了Model,我们也就拥有了操作数据库的能力。创建Model:
④ Entity:由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。创建entity:
完整的过程 :
⑤基本操作之查询:查询分很多种类型,如条件查询,过滤查询等等,这里只说最基本的find查询。
其他查询方法:
1 返回满足查询条件的第一条数据findOne() ;
2 按照ID查询数据:findById(_id,callback());
3 find过滤:对显示返回结果进行过滤,相当于mysql中select后的字段。例如:Model.find({age:8},{name:1,age:1,_id:0},callback());_id是默认返回,如("_id":0)则表示不显示,但对其他不需要显示的属性且不是_id,如果设置为0的话将会抛异常或查询无果。
⑥基本操作之更新:Model.update(查询条件,更新内容,回调函数);
⑦基本操作之删除:Model.remove(查询条件,回调函数)
⑧基本操作之高级查询:通过操作符:$in:包含,$gt:大于,$It:小于,$ne:不等于,$or:或,$exists:是否存在,来设定条件进行查询。例如:
如果你的业务通常能知道key,那么MongoDB是一个好选择,比如某游戏的玩家信息,这是很典型的NoSQL的应用场景。另外一点是mongodb可以存储多种数据类型,比如我们想存一个列表,在MySQL中就只能拼成字符串来存,但是NoSQL本身就支持列表,所以可以尽可能的保持数据结构。此外mongodb具有并发量大,可以集群,存储量大。但是他有千分之几的概率有写丢失。
mysql的强项是关系模型,在不知道主键的情况下,查询的灵活性和效率都能得到很好地优化,适合网站这类的应用,因为很难提前确定要根据某个条件进行查询,关系模型的表达能力是很强的。Mysql并发一般,适合查询。例如用户信息等重要数据可以用mongodb存储。
当然node.js开发中,redis用的也很多,redis是个强大的缓存组件,node出现之后,在与redis通讯时,不走原来的那种线程机制,而是走事件驱动,原来的IO瓶颈没有了,非常有利于提供高并发。
2 node.js中使用mongodb
mongodb简介:
①MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源的NoSQL数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能,相比MySQL那样的关系型数据库,它更显得轻巧、灵活,非常适合在数据规模很大、事务性不强的场合下使用。
②MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案;
③MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于
JSON对象。字段值可以包含其他文档,数组及文档数组。
安装好mongodb后,在安装目录下打开cmd,执行mongod --datapath=E:\mongodb\data,data是数据库的存储位置。在执行:mongo --host:127.0.0.1,启动mongodb数据库。
mongoose简介:
Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让Node.js操作Mongodb数据库变得更加灵活简单。
①集合collection和文档document:mongodb是一个对象数据库,所有数据以document存储,它是一个关联数组式的对象,内部由属性构成,相当于mysql中的一条记录,多个document组成collection,相当于mysql中一张表中的数据。
②Schema:一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架。定义一个Schema:
③Model:由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类。拥有了Model,我们也就拥有了操作数据库的能力。创建Model:
var StudentModel = db.model("qiqi", StudentSchema); //qiqi是数据库中集合的名称
④ Entity:由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。创建entity:
var studentEntity = new StudentModel({ name : "qiqi", age : 44, email: "qiqi@qq.com"}); //实际是插入了数据
完整的过程 :
//1 加载模块 var mongoose = require("mongoose"); //2. 连接数据库 mongod 服务器端 mongo客户端 //数据库的名称可以是不存在 var db = mongoose.connect("mongodb://134.66.121.144:27017/qizhiqq"); //如果连接成功会执行error回调 db.connection.on("error", function (error) { console.log("数据库连接失败:" + error); }); //如果连接成功会执行open回调 db.connection.on("open", function () { console.log("数据库连接成功"); }); //定义一个 schema,描述此集合里有哪些字段,字段是什么类型 var StudentSchema = new mongoose.Schema({ name : { type:String }, home : { type:String }, age : { type:Number, default:0 }, time : { type:Date, default:Date.now }, email: { type:String,default:''} }); //创建模型,可以用它来操作数据库中的student集合,指的是整体 var StudentModel = db.model("student", StudentSchema); //根据模型创建实体,是指的个体对象 var StudentEntity = new StudentModel({ name : "qiqi", age : 11, email: "qiqi@qq.com", home:'shanghai' }); //用save 方法把自己保存到数据库中 StudentEntity.save(function(error,data){ if(error){ console.log("error :" + error); }else{ console.log(data); } }); //也可以用model的create方法直接实现以上两步 <pre>PersonModel.create({ name:"qiqi", age:8}, function(error,doc){ if(error) { console.log(error); } else { console.log(doc); } });
⑤基本操作之查询:查询分很多种类型,如条件查询,过滤查询等等,这里只说最基本的find查询。
Model.find({},function(error,docs){ //若没有向find传递参数,默认显示所有文档 }); Model.find({ "age": 44}, function (error, docs) { if(error){ console.log("error :" + error); }else{ console.log(docs); //docs是 age为44的所有文档 } });
其他查询方法:
1 返回满足查询条件的第一条数据findOne() ;
2 按照ID查询数据:findById(_id,callback());
3 find过滤:对显示返回结果进行过滤,相当于mysql中select后的字段。例如:Model.find({age:8},{name:1,age:1,_id:0},callback());_id是默认返回,如("_id":0)则表示不显示,但对其他不需要显示的属性且不是_id,如果设置为0的话将会抛异常或查询无果。
⑥基本操作之更新:Model.update(查询条件,更新内容,回调函数);
StudentModel.update({age:8},{$set:{age:7}},function(err){ if(err){ console.log("error :" + err); }else{ console.log(doc); } })//默认匹配第一条,要更新所有:StudentModel.update({age:8},{$set:{age:7}},{multi:true},function(err){...})
⑦基本操作之删除:Model.remove(查询条件,回调函数)
⑧基本操作之高级查询:通过操作符:$in:包含,$gt:大于,$It:小于,$ne:不等于,$or:或,$exists:是否存在,来设定条件进行查询。例如:
Model.find({name:{$ne:qiqi}},callback()); //查询名字不是qiqi的document Model.find({age:{$gt:5},name:{$exists:true}},callback());// 查询age大于5,并且name存在的document Model.find({$or:[{name:'qiqi'},{age:8}]},callback()); //查询name是qiqi或者age是8的document
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 如何在 Fedora 上安装 MongoDB 服务器
- 使用 HTTP 上传 G 级的文件之 Node.js 版本
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- mongo实现消息队列
- Node.js压缩web项目中的js,css和图片
- 如何在 Ubuntu 上安装 MongoDB
- async.js 学习记录
- 异步流程控制:7 行代码学会 co 模块
- 信息安全聚合 Sec-News 的重构之路
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- node.js中的fs.mkdir方法使用说明
- 为什么Node.js会这么火呢?Node.js流行的原因
- 究竟什么是Node.js?Node.js有什么好处?
- Linux下为Node.js程序配置MySQL或Oracle数据库的方法
- 三种Node.js写文件的方式
- node.js中的http.response.removeHeader方法使用说明
- 快速掌握Node.js模块封装及使用
- Node.js文件操作方法汇总