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 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
jquery mobile实现拨打电话功能的几种方法
Aug 05 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
Apr 12 Javascript
Javascript中replace()小结
Sep 30 Javascript
javascript动画系列之模拟滚动条
Dec 13 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
VueJs 搭建Axios接口请求工具
Nov 20 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
微信小程序如何获取地址
Dec 24 Javascript
原生JS实现烟花效果
Mar 10 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
python登录并爬取淘宝信息代码示例
2017/12/09 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Python绘图实现显示中文
2019/12/04 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
什么是索引指示器
2012/08/20 面试题
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
2015年新农合工作总结
2015/03/30 职场文书
消夏晚会主持词
2015/06/30 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
python实现高效的遗传算法
2021/04/07 Python
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL