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显示选择目录对话框的代码
Nov 10 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
JavaScript实现点击文字切换登录窗口的方法
May 11 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
老生常谈原生JS执行环境与作用域
Nov 22 Javascript
微信小程序实现图片轮播及文件上传
Apr 07 Javascript
Vue.js在数组中插入重复数据的实现代码
Nov 17 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
Dec 24 Javascript
Vue的props父传子的示例代码
May 20 Javascript
Vue Element校验validate的实例
Sep 21 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编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
JavaScript实现修改伪类样式
2017/11/27 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
Weblogc domain问题
2014/01/27 面试题
国家助学金获奖感言
2014/01/31 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
产品售后服务承诺书
2014/05/21 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
素质教育学习心得体会
2016/01/19 职场文书