设为首页 收藏本站
查看: 1722|回复: 0

[经验分享] mongoose

[复制链接]

尚未签到

发表于 2015-7-6 05:03:22 | 显示全部楼层 |阅读模式
  Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。
  当然要使用的话,必须要先安装好环境Node.js与MongoDB =》 MongoDB安装
  MongoDB是目前最流行的noSQL数据库之一,它是专为node.js而开发的,理解下与我们常用的RDBMS关系型数据库的区别就可以基本使用了
  MongoDB中有三个基本的概念区别于RDBMS


  • 数据库:数据库是一个物理容器集合。每个数据库都有自己的一套文件系统上的文件。一个单一的MongoDB服务器通常有多个数据库。
  • 集合:集合是一组MongoDB的文档。它相当于一个RDBMS表。收集存在于一个单一的数据库。集合不执行模式。集合内的文档可以有不同的领域。通常情况下,一个集合中的所有文件是相同或相关的目的
  • 文档:文档是一组键 - 值对。文件动态模式。动态模式是指,在相同集合中的文档不需要具有相同的字段或结构组的公共字段的集合的文档,可以容纳不同类型的数据。
  下面给出的表显示RDBMS术语使用 MongoDB 的关系
DSC0000.png
  观察下最重要的一点就是我们关系数据库中的表与字段被合集与文档的概念给替代了,Mongo不在具有主键的关系了,数据保存都是放在文档中用JSON风格键值对风格的文件形式存放
  详细了解可以异步  MongoDB资料汇总专题


Mongoose中的操作流程
  1. 连接数据库



var mongoose = require("mongoose");
// 连接字符串格式为mongodb://主机/数据库名
mongoose.connect('mongodb://localhost/test');
  这里没太多好解释的,安装mongoose后,引入模块连接到本地的mongodb的test表,这里要注意了,mongo数据库是运行状态
  
  
  2. 存储数据



var Schema = mongoose.Schema;
//骨架模版
var movieSchema = new Schema({
doctor   : String,
title    : String,
language : String,
country  : String,
year     : Number,
summary  : String,
poster   : String,
flash    : String
})
//模型
var Movie = mongoose.model('Movie', movieSchema);
//存储数据
var moive = new Movie({
title: '黑衣人三',
doctor: '史密斯',
year: 2018,
flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
country: '美国',
language: '英语',
summary: '好片'
})
//保存数据库
moive.save(function(err) {
if (err) {
console.log('保存失败')
return;
}
console.log('meow');
});
  以上是最简单的数据操作了
  流程就是:通过Schema创建一个模式movieSchema ,通过模式movieSchema创建一个模型Movie,通过模型Movie写入数据,通过save方法保存
  定义schema->创建model->实例化方法
  表 –》 合集 –》 文档
  这里涉及几个名词概念Schema与Model
  
  3.Schema与Model


  • Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
  • Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
  虽然模式(Schema)在MongoDB的存储中并不是必须的,但是一般来说为了文档的整齐一致我们在Mongoose中还是会用到模式。可以说,Mongoose中的一切都从定义模式开
  不像传统的关系型数据库一样,比如mysql,连接好数据后直接有把sql语句丢到一个指定的方法中就执行了,这里会有Schema的抽象概念
  Schema它类似于关系数据库的表结构,可以理解为数据库模型骨架
  Schema可以看作工厂中模具一样,好比一个茶杯,喝水是茶杯最终的功能,茶杯本身就像是Model,那么茶杯的批量生产是需要靠工厂的模具成型的,这就像是Schema了
  Schema不仅定义了文档结构和使用性能,还可以有扩展插件、实例方法、静态方法、复合索引、文档生命周期钩子
  
  4. CURD操作
  Model可以看到关系型数据库中的表,那么通过new Model出来的实例document文档对应的则是关系数据库中表的一行记录
  document有许多内置的实例方法. 可以直接执行增删改查操作
  增加数据



//模型
var Movie = mongoose.model('Movie', movieSchema);
var moive = new Movie({
title: '黑衣人三',
doctor: '史密斯',
year: 2018,
flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
country: '美国',
language: '英语',
summary: '好片'
})
//保存数据库
moive.save(function(err) {
if (err) {
console.log('保存失败')
return;
}
console.log('meow');
});
  在这里我们通过对模型Movie实例化生成了一个叫moive的文档,并使用save方法将它存储到了集合
  
  修改数据



User.update({_id: oneUser._id}, {
$set: {name: oneUser.name,password:oneUser.password}
}, function(err) {
if(err){
console.log(err)
return
}
console.log('更新成功')
});
  更新的数据比较少用$set,可用性还是很好
  
  删除数据



User.remove({
_id: id
}, function(err) {
if (err) {
console.log(err)
return
}
console.log('删除成功')
});
  
  简单的数据库的连接,跑通了整个流程,具体的可以查看API
  Mongoose API : http://mongoosejs.com/docs/api.html
  附上git上mongoose的一个简单的测试案例
  https://github.com/JsAaron/node_movie/tree/master/data
  支持增加、修改、删除数据
DSC0001.png
  win平台安装:
  1. 首先要安装好MongoDB安装
  2. 进入目录,通过npm install 安装模块依赖、grunt、mongoose、express、jade
  3. 执行命令grunt,自动检测文件改动重启服务
  4. 打开http://localhost:3000/即可

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83451-1-1.html 上篇帖子: MongoDB on Asp.Net MVC3–CRUD 下篇帖子: Mongodb源码分析--删除记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表