mongo 进阶之—— mongoose 基本操作

简介: 有的人说,怎么老是成功的,应该需要些失败来看看mongoose的作用,那么咋们就来看看这个失败是怎么处理的

在上一篇文章中介绍了,怎么使用mongoose来连接数据库,现在来实现一个简单的crud。


schema


schema 是mongoose中定义的模型,下面咋们就以学生为例,来建立一个模型


student模型


学生一般都有,学号,姓名,年龄,班级,爱好等属性


var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var stuObj = new Schema({
  stuNo: {
    // 类型
    type: String,
    //  是否必须
    required: true,
    // 是否是唯一的
    unique: true,
    // 去掉首位空格
    trim: true,
    //  最小长度
    minlength: 3,
    //  最大长度
    maxlength: 18,
  },
  name: {
    // 类型
    type: String,
    // 必须
    required: true,
    // 去掉首位空格
    trim: true,
    // 最小长度
    minlength: 2,
    // 最大长度
    maxlength: 10,
  },
  age: {
    type: Number,
    // 默认值
    default: 18,
  },
  loves: {
    // 这个爱好是一个字符串类型的数组
    type: [String],
    default: [],
  },
  address: {
    //   家庭地址是一个对象类型,里面必须包含省市
    type: {
      province: {
        type: String,
        required: true,
      },
      city: {
        type: String,
        required: true,
      },
    },
    required: true
  },
});
// 把模型映射到数据库中
var StuSchema =  mongoose.model("Students", stuObj)
复制代码


模型的验证的方式比较多,具体查看文档,这里只展示如何使用


新增文档


既然连接数据库好了,模型也好了,接下来就最模型进行操作,一切的操作都从新增开始。


方式一:nodejs的写法(回调函数的形式)


var obj = {
  stuNo: "20210101",
  name: " twinkle ",
  loves: ["code", "打豆豆"],
  address: {
    province: "江西省",
    city: "赣州市",
  },
};
// 新增学生的方式
var userModel = new StuSchema(obj);
userModel.save(function (err) {
  if (err) {
    console.log(err, '-----保存失败')
  }
  console.log('保存成功!')
})
复制代码


代码运行结果


4883cecb88f564e23d20e4a20694a113.png


数据库真实的结果


f1e3f7e5011f346f3cddc5f73255c572.png


方式二,使用es6的写法


由于模型的save方法是一个promise,所以在现在肯定是可以使用promise来处理的。


var obj = {
  stuNo: "20210102",
  name: " marry ",
  loves: ["学习", "还是学习"],
  address: {
    province: "江西省",
    city: "赣州市",
  },
};
// 新增学生的方式
async function  addStu(obj) {
  var userModel = new StuSchema(obj);
  var result = await userModel.save();
  console.log(result,'---保存结果')
}
addStu(obj)
复制代码


代码运行结果


4a3de9f42e2428ef4aa9cd623c3fca16.png


数据库真实的结果


987c9e7cf5a173547e1c31df9f7edffb.png


注意


有的人说,怎么老是成功的,应该需要些失败来看看mongoose的作用,那么咋们就来看看这个失败是怎么处理的


1. 名字重复


ccb8282e1e5a89d1bfbb79543e10a663.png


当名字重复的时候,会触发mongoose的验证,直接你给报错


2.obj对象和模型不匹配更多


560ca0bc761898c19b49add8e3aaeb9e.png


当字段多余的时候,mongoose会自动帮你把多余的字段去掉,并且会根据schema的规则来整理成合适的格式保存数据。


3. obj字段更少


这里毫不疑问,字段少了肯定触发规则验证,报错。这里就不演示了


由于上面的两种方法,都只是js的更新带来的,在以后的代码书写中,肯定是推荐使用es6以上的写法,所以在下面的案例中就只会用es6的写法,node回调函数的写法请自行体验。


查询文档


新增好了数据,接下来就查询数据了。


用 mongoose 查询文档相当容易啦,它支持 MongoDB 的高级( rich )查询语法。 查询文档可以用 model 的 find, findById, findOne, 和 where 这些静态方法。查询比较多,这里只演示最基础的,详情的查询后面在出文章。


async function findStu(name){
 var res =  await StuSchema.find({name:name});
 console.log(res);
}
findStu('twinkle');
复制代码


查询的结果如下


c002e9bb1073404ac09c4b3087319559.png


如果不存在的结果,查询返回的是啥呢?


4bec8f3c71b140070dd030d9c4477198.png


修改文档


/**
 * 修改文档
 * @param {*} condition  条件
 * @param {*} updCon 修改的内容
 */
async function updStu(condition, updCon){
  var res =  await StuSchema.update(condition,updCon);
  console.log(res);
 }
 updStu({name: 'mack'},{name:'jack'})
复制代码


结果


3f29a6528e858a29b56f61a3d2b5b7a6.png


但是这个方法已经过时了,控制台会报一个警告⚠:


4c382e099b01008b605c9c17d4278931.png


修改后的如下:


/**
 * 修改文档
 * @param {*} condition  条件
 * @param {*} updCon 修改的内容
 */
async function updStu(condition, updCon){
  var res =  await StuSchema.updateOne(condition,updCon);
  console.log(res);
 }
 updStu({name: 'jack'},{name:'jack1',abc:1232})
复制代码


763045a74b09bd0d801601df909afeb8.png


细心的同学发现了,我们在修改的时候,添加了些无效的属性。结果还是可以完成修改的,但是数据库的真正的内容是啥呢?


5178671bb7eb4e7363d66e47f7b31e9f.png


删除


写的好不好都没有关系,能看到这里的人肯定很牛,我给你点赞👍👍👍


删除其实很简单如下:


/**
 * 删除文档
 * @param {*} condition  条件
 */
async function delStu(condition){
  var res =  await StuSchema.deleteOne(condition);
  console.log(res);
 }
 delStu({name:'jack1'})
复制代码


fafe36200a65d5ef8792453082898ed7.png


数据库真实结果


cf0619ae3f7128f3ec6ce793de60525f.png


有的人要说,条件不存在。这个删除啥?


e92aa48615cbface5bc95003b856724c.png

相关文章
|
NoSQL MongoDB 数据库
Mongodb的基本使用
Mongodb的基本使用
196 0
|
3月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
95 0
|
6月前
|
存储 NoSQL MongoDB
MongoDB怎么用
【6月更文挑战第7天】MongoDB怎么用
46 1
|
7月前
|
JSON NoSQL MongoDB
MongoDB【CRUD基本操作】
MongoDB【CRUD基本操作】
|
SQL NoSQL 关系型数据库
【mongo 系列】mongodb 学习三,常用操作实际操练
可以使用 insert,insertOne,insertMany 插入不同的数据,各取所需,其中 insertMany 用于插入多条数据,当然也可以插入 1 条数据
141 4
|
存储 JSON NoSQL
【mongo 系列】mongodb 学习二,mongodb 的基本使用梳理
• 文档 是 mongodb 的最小数据集单位,是多个键值对有序租户在一起的数据单元,类似于关系型数据库的记录
258 4
|
SQL JavaScript 关系型数据库
mongo 的基本操作
这里可能有的人又会说,使用use xxx 确实切换了数据库,但是在show dbs 里面怎么看不到,这是因为mongo 给你创建了数据库,但是里面没有东西,等有东西的时候自动显示出来。
mongo 的基本操作
|
资源调度 NoSQL 机器人
mongo 进阶之—— mongoose 认识
不管是哪种代码的环境,如果需要连接数据库,都需要使用数据库的驱动。(以下代码的环境是node为例)。在node环境中,mongodb的驱动就叫做mongodb,但是这个驱动也有一个缺陷,模型的验证做的不是很好,一般我们都会使用mongoose 这个库来自定模型,验证参数等
mongo 进阶之—— mongoose 认识
|
JSON NoSQL MongoDB
MongoDB基本操作(一)——简介、基本操作、增删改查
MongoDB基本操作(一)——简介、基本操作、增删改查
349 0
|
存储 NoSQL MongoDB
mongoose连接mongodb进行数据库操作详细步骤
mongoose连接mongodb进行数据库操作详细步骤
530 0

相关实验场景

更多