node使用Mongoose类库实现简单的增删改查


Posted in Javascript onNovember 08, 2018

Mongoose是在nodejs环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为javascript对象供我们使用。

Mongoose安装

npm install mongoose

安装成功后,我们就可以使用 require('mongoose')来使用了;

下面是链接本地数据库 mongoosedb,代码如下:

var mongoose = require('mongoose');
var DB_URL = 'mongodb://localhost:27017/dataDb';

/* 链接 */
mongoose.connect(DB_URL);

/* 链接成功 */
mongoose.connection.on('connected', function() {
 console.log('Mongoose connection open to ' + DB_URL);
});

// 链接异常
mongoose.connection.on('error', function(err) {
 console.log('Mongoose connection error:' + err);
});

// 链接断开

mongoose.connection.on('disconnected', function() {
 console.log('Mongoose connection disconnected');
});

如下图所示

node使用Mongoose类库实现简单的增删改查

从如上代码,监听了几个事件,并且执行触发了connected事件,这表示连接成功。

2. Schema介绍

它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构。

那么如何去定义一个Schema呢?请看如下代码:

var mongoose = require('mongoose');
var TestSchema = new mongoose.Schema({
 name: { type: String }, // 属性name,类型为String
 age: { type: Number, default: 30 }, // 属性age,类型为Number,默认值为30
 time: { type: Date, default: '当前时间' }
});

如上在我们的TestSchema中每个key在我们的文件将被转换为相关的SchemaType定义的一个属性。允许使用的SchemaTypes有如下类型:

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

如果我们在如上编写完成后,我们需要添加额外的键的话,我们可以使用Schema中的add方法.

3. 创建一个模型

我们上面定义了Schema,我们需要将我们的TestSchema转成我们可以使用的模型,模型具有对数据库操作的能力。
我们可以通过 mongoose.model(modelName, schema);

先来结合schema和创建一个模型来简单的看一个demo,如下代码:

var mongoose = require('mongoose');
// schema定义
var TestSchema = new mongoose.Schema({
 name: { type: String },
 age: { type: String },
 sex: { type: String }
});

// 创建model
var TestModel = mongoose.model('test1', TestSchema);

// 初始化数据 
var TestInt = new TestModel({
 name: 'kongzhi',
 age: '30',
 sex: 'girl'
});

console.log(TestInt.name); // kongzhi
console.log(TestInt.age); // 30
console.log(TestInt.sex); // girl

下面我们来简单的使用上面定义的内容,来做个简单的数据库增删改查的操作。

1. 在项目中的根目录下新建一个db.js, 代码如下:

var mongoose = require('mongoose');
var DB_URL = 'mongodb://localhost:27017/dataDb';

/* 链接 */
mongoose.connect(DB_URL);

/* 链接成功 */
mongoose.connection.on('connected', function() {
 console.log('Mongoose connection open to ' + DB_URL);
});

// 链接异常
mongoose.connection.on('error', function(err) {
 console.log('Mongoose connection error:' + err);
});

// 链接断开

mongoose.connection.on('disconnected', function() {
 console.log('Mongoose connection disconnected');
});

module.exports = mongoose;

2. 下面我们新建一个user的Schema,命名为user.js, 它有如下属性,如下代码:

/*
 定义一个user的Schema
*/
var mongoose = require('./db.js');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
 username: { type: String }, // 用户名
 password: { type: String }, // 密码
 age: { type: Number }, // 年龄
});

/* model 是由schema生成的模型,具有对数据库操作的能力 */

module.exports = mongoose.model('User', UserSchema);

3. 数据库操作,我们新建一个文件叫 app.js

3.1 插入数据(Model.save([fn])),代码如下:

var User = require('./user.js');
// 插入数据

var user = new User({
 username: 'kongzhi0707',
 password: '123456',
 age: 30
});

user.save(function(err, res) {
 if (err) {
  console.log(err);
 } else {
  console.log(res);
 }
});

然后在命令行中运行app.js ,可以看到如下:

node使用Mongoose类库实现简单的增删改查

然后我们再到本地数据库中查看数据,可以看到新增一条数据,如下图所示

node使用Mongoose类库实现简单的增删改查

从数据库中可以看到插入数据成功了;

3.2 更新数据(Model.update(conditions, doc, [options], [callback]))

conditions: 更新的条件,该值是一个对象。
doc: 需要更新的内容,该值也是一个对象。
options: 可选参数,它有如下属性:
safe :(布尔型)安全模式(默认为架构中设置的值(true))
upsert :(boolean)如果不匹配,是否创建文档(false)
multi :(boolean)是否应该更新多个文档(false)
runValidators:如果为true,则在此命令上运行更新验证程序。更新验证器根据模型的模式验证更新操作。
strict:(布尔)覆盖strict此更新的选项
overwrite: (布尔)禁用只更新模式,允许您覆盖文档(false)
callback: 回调函数

如下代码执行更新:

var User = require('./user.js');

// 更新数据 

function update() {
 // 更新数据的条件查询
 var wherestr = {'username': 'kongzhi0707'};

 // 执行更新数据
 var updatestr = {'password': 'abcdef'};

 User.update(wherestr, updatestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 调用更新函数
update();

运行app.js 后,如下图所示:

node使用Mongoose类库实现简单的增删改查

继续查看数据库,可以看到password字段被更新了,如下图所示:

node使用Mongoose类库实现简单的增删改查

3.3 findByIdAndUpdate(id, [update], [options], [callback]);

根据id进行更新;此id就是数据库中自动生成的id;如下代码,

var User = require('./user.js');

// 更新数据 

function update() {
 // 更新数据的条件查询
 var id = '5b3a4941ca11752732fee772';

 // 执行更新数据
 var updatestr = {'password': 'vvvvv'};

 User.findByIdAndUpdate(id, updatestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 调用更新函数
update();

如下图数据库显示如下:

node使用Mongoose类库实现简单的增删改查

3.4 删除 Model.remove(conditions, [callback])

代码如下:

var User = require('./user.js');

function del() {
 // 删除数据的条件
 var wherestr = {'username': 'kongzhi0707'};

 User.remove(wherestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 调用函数
del();

到数据库中查看数据,可以看到没有这条数据了;

3.5 条件查询 Model.find(conditions, [fields], [options], [callback]);

如下代码所示:

var User = require('./user.js');
function find() {
 // 删除数据的条件
 var wherestr = {'userName': '龙恩0707'};

 User.find(wherestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 调用函数
find();

执行后,如下所示:

node使用Mongoose类库实现简单的增删改查

3.6 数量查询 Model.count(conditions, [callback])

var User = require('./user.js');

function getCountByConditions() {

 User.count({}, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res); // 会输出数据库数据的数量
  }
 });
}
// 调用函数
getCountByConditions();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript-Mozilla和IE中的一个函数直接量的问题
Jan 09 Javascript
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
Nov 11 Javascript
如何利用JQuery实现从底部回到顶部的功能
Dec 27 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 jQuery
详解Angular中通过$location获取地址栏的参数
Aug 02 Javascript
JavaScript实现新年倒计时效果
Nov 17 Javascript
浅谈vue-props的default写不写有什么区别
Aug 09 Javascript
javascript canvas封装动态时钟
Sep 30 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
Nov 08 #Javascript
Echarts之悬浮框中的数据排序问题
Nov 08 #Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 #jQuery
基于React Native 0.52实现轮播图效果
Aug 25 #Javascript
详解webpack打包后如何调试的方法步骤
Nov 07 #Javascript
微信小程序列表中item左滑删除功能
Nov 07 #Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 #Javascript
You might like
将PHP作为Shell脚本语言使用
2006/10/09 PHP
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
php MsSql server时遇到的中文编码问题
2009/06/11 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Python编写百度贴吧的简单爬虫
2015/04/02 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
wxPython中listbox用法实例详解
2015/06/01 Python
python相似模块用例
2016/03/04 Python
Python中函数的返回值示例浅析
2019/08/28 Python
python圣诞树编写实例详解
2020/02/13 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
幸福家庭标语
2014/06/27 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
基层党组织整改方案
2014/10/25 职场文书
公司员工辞职信范文
2015/05/12 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书