Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。

  当然要使用的话,必须要先安装好环境Node.js与MongoDB =》 MongoDB安装

  MongoDB是目前最流行的noSQL数据库之一,它是专为node.js而开发的,理解下与我们常用的RDBMS关系型数据库的区别就可以基本使用了.

  MongoDB中有三个基本的概念区别于RDBMS:

  1. 数据库:数据库是一个物理容器集合。每个数据库都有自己的一套文件系统上的文件。一个单一的MongoDB服务器通常有多个数据库。
  2. 集合:集合是一组MongoDB的文档。它相当于一个RDBMS表。收集存在于一个单一的数据库。集合不执行模式。集合内的文档可以有不同的领域。通常情况下,一个集合中的所有文件是相同或相关的目的
  3. 文档:文档是一组键 – 值对。文件动态模式。动态模式是指,在相同集合中的文档不需要具有相同的字段或结构组的公共字段的集合的文档,可以容纳不同类型的数据。

  下面给出的表显示RDBMS术语使用 MongoDB 的关系

  

  观察下最重要的一点就是我们关系数据库中的表与字段被合集与文档的概念给替代了,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 userSchema = new Schema({});


//这种写法有点类似 object = Object();返回的也是对象
//usersSchema = mongoose.Schema;

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: ,
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这个过程

/*var Schema = mongoose.Schema;
//骨架模版
var movieSchema = new Schema({
doctor : String,
title : String,
language : String,
country : String,
year : Number,
summary : String,
poster : String,
flash : String
})*/
//通过model直接建立关系型模型
var Movie = mongoose.model('Movie', {
doctor : String,
title : String,
language : String,
country : String,
year : Number,
summary : String,
poster : String,
flash : String
});
//存储数据
var moive = new Movie({
title: '黑衣人三',
doctor: '史密斯',
year: ,
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: ,
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方法将它存储到了集合

  修改数据

//存储数据
var moive = new Movie({});
//更新数据
moive.update({_id: oneUser._id}, {
$set: {name: oneUser.name,password:oneUser.password}
}, function(err) {
if(err){
console.log(err)
return
}
console.log('更新成功')
});

  删除数据

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

  支持增加、修改、删除数据

  

  win平台安装:

  1. 首先要安装好MongoDB安装

  2. 进入目录,通过npm install 安装模块依赖、grunt、mongoose、express、jade

  3. 执行命令grunt,自动检测文件改动重启服务

  4. 打开http://localhost:3000/即可

  资料:

  Mongoose – 让NodeJS更容易操作Mongodb数据库:http://floss.zoomquiet.io/data/20110718215356/index.html

  http://hao.jser.com/archive/7767/

  express+mongoose : http://qianduanblog.com/post/nodejs-learning-7-express-mongoose.html

  nodejs:http://qianduanblog.com/category/nodejs/

  mongoose简易教程:http://www.qdkf.net/mongoose.html

  http://jerrylee.me/blog/post/cong-tou-kai-shi-yong-nodejs-he-mongoDB-tu-shou-da-jian-Blog%EF%BC%88-er-%EF%BC%89

MONGOOSE – 让NODE.JS高效操作MONGODB(转载)的更多相关文章

  1. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  2. node.js高效操作mongodb

    node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...

  3. Node.js之操作Mongodb

    // mongoose 链接 var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://127 ...

  4. 1.从Node.js链接到MongoDB

    MongoDB采用了MongoDB Node.js驱动程序作为标准. 1.安装MongoDB驱动 npm install mongoDB npm install mongoose require('m ...

  5. Node.js:连接 MongoDB

    ylbtech-Node.js:连接 MongoDB 1.返回顶部 1. Node.js 连接 MongoDB MongoDB是一种文档导向数据库管理系统,由C++撰写而成. 本章节我们将为大家介绍如 ...

  6. React+Node.js+Express+mongoskin+MongoDB

    首发:个人博客,更新&纠错&回复 采用React + Node.js + Express + mongoskin + MongoDB技术开发的一个示例,演示地址在这里,项目源码在这里. ...

  7. Node.js之操作文件系统(一)

    Node.js之操作文件系统(一) 1. 同步方法与异步方法 在Node.js中,使用fs模块来实现所有有关文件及目录的创建.写入及删除操作.,在fs模块中,所有对文件及目录的操作都可以使用同步与异步 ...

  8. Node.js之操作文件系统(二)

    Node.js之操作文件系统(二) 1.创建与读取目录 1.1 创建目录 在fs模块中,可以使用mkdir方法创建目录,该方法的使用方法如下: fs.mkdir(path,[mode],callbca ...

  9. 在Node.js中操作文件系统(一)

    在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...

随机推荐

  1. VCard介绍

    91助手和豌豆荚用VCard来存储通讯录,今天调查了一下. 1. 方案 使用VCard存储通讯录,文件扩展名为 vcf,  数据文件可以直接导入IPhone/Windows Phone/android ...

  2. 【转】WCF OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout

    关于这四个属性,在MSDN中的解释有点敷衍了事.Open/Close/Receive/Send本是HTTP/TCP/SOCKET的概念,Read/Write Operation则是Web Servic ...

  3. cocos2d-x 3.0 在C++中调用lua函数(2)

    个人觉得3.0里面, 在C++下面调用lua函数很不方便, 所以就扩展了一个类, 继承自LuaStack, 代码和使用方式如下: #ifndef __CC_LUA_STACKEX_H_ #define ...

  4. C语言对文件的基本操作

    在C语言中,对于文件的操作是利用FILE结构体进行的. 几个常用的操作文件函数简介 1:打开文件 FILE *fopen( const char *filename, const char *mode ...

  5. 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

    0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

  6. Python爬虫学习笔记-2.Requests库

    Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...

  7. vsftpd下错误之:500 OOPS

    vsftpd下错误之:500 OOPS.vsftpd 是在Linux发行版中最推崇的一种FTP服务器程序,vsftpd的特点:小巧轻快.安全易用等. Linux也是为人们所常用的操作系统之一.这里主要 ...

  8. Ansible Playbook 使用循环语句

    如下,with_items 是循环的对象,with_items 是 python list 数据结构,task 会循环读取 list 里面的值,key 的名称是 item [root@localhos ...

  9. Java调用MQ队列

    IBM MQ 6.0中设置两个队列,(远程队列.通道之类都不设置). 队列管理器是XIR_QM_1502 队列名称是ESBREQ IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一 ...

  10. iOS 事件的产生、传递、响应

    一.事件的产生和传递 1.1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中为什么是队列而不是栈?因为队列的特定是先进先出,先产生的事件先处理才符合常 ...