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 相关文章推荐
js 鼠标拖动对象 可让任何div实现拖动效果
Nov 09 Javascript
十分钟打造AutoComplete自动完成效果代码
Dec 26 Javascript
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
jquery $.getJSON()跨域请求
Dec 21 Javascript
多个js与css文件的合并方法详细说明
Dec 26 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
Jun 25 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
原生JS实现拖拽效果
Dec 04 Javascript
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
开启PHP的伪静态模式
2015/12/31 PHP
详解YII关联查询
2016/01/10 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
Js组件的一些写法
2010/09/10 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
python语言元素知识点详解
2019/05/15 Python
python——全排列数的生成方式
2020/02/26 Python
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
材料采购员岗位职责
2013/12/17 职场文书
学习心得体会
2014/01/01 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
幼儿学前班评语
2014/12/29 职场文书
秦兵马俑导游词
2015/02/02 职场文书
材料员岗位职责范本
2015/04/11 职场文书
python turtle绘图命令及案例
2021/11/23 Python
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js