MongoDB学习笔记(五)

Mongoose简介及其使用方法

在学习中大部分都是通过MongoDB的shell来完成对数据库的各种操作的,而在实际的开发中如果继续采用这种方式是比较低效率的,所以我们需要通过其他语言来操作MongoDB,在前端中一般使用Node.js来操作MongoDB,而Mongoose就是一个让我们通过Node来操作MongodDB的模块

一、Mongoose

  1. Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块(Node中原生的用来操作MongoDB的模块)进行了进一步的优化封装,并提供了更多的功能,在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处。
  2. ODM中的O指的是JS对象,D指的是数据库中的文档,M的意思是将MongoDB数据库中文档对象映射成JS中的对象,这样通过对JS对象的操作就可以操作数据库了。

1、Mongoose的好处

  1. 可以为文档创建一个模式结构(Schema)
           模式结构就是一个对文档的约束,用来限制文档字段的个数、类型和字段值等
  2. 可以对模型中的对象/文档进行验证
  3. 数据可以通过类型转换转化为对象模型
  4. 可以使用中间件来应用业务逻辑挂钩
  5. 比Node原生的MongoDB驱动更容易

2、Mongoose提供的新的对象

  • Schema(模式对象)
           Schema对象的定义约束了数据库中的文档结构
  • Model(模型对象)
           Model对象作为集合中的所有文档的表示,相当于MongoDB数据库可中的Collection
  • Document(文档对象)
           Document表示集合中的具体文档,相当于集合中的一个具体文档

       Schema对象、Model对象、Document对象的创建具有先后顺序,先创建Schema对象,用来约束Model对象,然后再创建Model对象作为Document的容器,最后再创建Document对象

3、Mongoose的使用步骤

  1. 下载安装Mongoose模块
    命令:npm i mongoose
  2. 在项目中引入Mongoose模块
    var mongoose = require(“mongoose”);
  3. 连接Mongoose数据库
    mongoose.connect(“mongodb://数据库的ip地址:端口号/数据库名”,{useMongoClient:true});
    如果端口号是默认端口号27017则可以省略不写
  4. 监听MongoDB数据库的连接状态
    在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接,通过监视该对象,可以监听数据库服务器和客户端的连接与断开
    数据库连接成功时执行回调函数
    mongoose.connection.once(“open”,function(){
    });

    数据库断开时执行回调函数
    mongoose.connection.once(“close”,function(){
    });
  5. 断开数据库连接(该步骤一般不需要)
    mongoose.disconnect();

       mongoose模块的使用步骤中只有步骤1和2是必须的,其他的步骤可有可无。而且MongoDB数据库一般情况下只需要连接一次,连接一次以后,除非项目停止,服务器关闭,否则连接一般不会断开。

二、Mongoose操作数据库的方法

(详细的使用步骤可以查询:mongoose.com网站中的文档手册)

1、创建Schema对象

  1. 将 mongoose.schema 赋值给一个变量,可以简化操作
    var Schema = mongoose.schema;
  2. 创建Schema(模式)对象
    var stuSchema = new Schema({
    name:String,
    age:Number,
    gender:{
    type:String,
    default:“female”
    },
    address:String
    });

        创建好了Schema对象意味着已经创建好了数据库,规定好的数据库中存储的集合的样式,接下来就是创建集合了

2、创建Model对象

         Model代表数据库中的集合,通过Model才能对数据库进行操作,使用mongoose.model(modelNmae,schema)可以创建一个Model对象,Model就是数据库中集合的映射,所以modelName就是指数据库中其对应的那个集合的名字,mongoose会自动将集合名变成复数;schema指的是第一步中创建的对模型进行约束的schema对象名.
                var StuModel = mongoose.model(“student”,stuSchema);

3、向集合中插入一个文档Document

        mongoose中的文档对象是数据库中文档对象的一个映射,创建好了文档对象,其对应的数据库和集合也将被自动建立。通过以下语句可以实现Document对象的创建:
                Model对象名.create(doc,function(err){
                        if(!err){

                        }
                });
        其中doc是我们要创建的文档对象,当创建成功后,其后的回调函数会执行

二、Model的方法

有了model就可以使用mongoose模块对数据库进行CRUD操作了。

1. Model.create(doc(s),[callback])
     作用:该函数用来创建一个或多个文档并添加到数据库中
     参数:doc(s)可以是一个文档对象,也可以是一个文档对象的数组;[callback]回调函数是可选的,如果传入了回调函数,则当文档创建成功后会执行该函数
2. Model.find(conditions,[projection],[options],[callback])
     作用:该函数用来查询所有符合条件的所有文档,返回一个文档数组

     Model.findById(id,[projection],[options],[callback])
     作用:该函数用来根据文档的id属性值查询文档,返回一个文档对象

     Model.findOne(conditions,[projection],[options],[callback])
     作用:该函数用来查询符合条件的第一个文档,返回第一个符合条件的文档对象
     参数:
               conditions–查询对象,
               projection—投影对象,用于获取想要显示的字段,投影对象有两种定义方式:{字段名:值,字段名:值,…};”字段名1 字段名2 …“,该种定义方式,若不想显示_id字段,只需要在id字段前加入-,即”-_id“
               options–查询选项(skip,limit等)
               callback–回调函数,查询结果会通过回调函数返回,所以回调函数是必须传入的,回调函数中有两个参数,一个是err,一个是doc(s),doc(s)中存储了查询到的文档。
               其他用[]括起来的参数可以不传入
3. Model.update(conditions,doc,[options],[callback])
     作用:该函数用来修改所有符合条件的一个或多个文档,返回一个文档数组

     Model.updateMany(id,doc,[options],[callback])
     作用:该函数用来修改符合条件的所有文档

     Model.updateOne(conditions,doc,[options],[callback])
     作用:该函数用来修改符合条件的第一个文档
     参数:
               conditions–查询对象,
               doc—修改后的对象
               options–配置对象
               callback–回调函数
4. Model.remove(conditions,[callback])
     作用:该函数用来删除符合条件的一个或多个文档

     Model.deleteOne(conditions,[callback])
     作用:该函数用来删除符合条件的第一个文档

     Model.deleteMany(conditions,[callback])
     作用:该函数用来删除符合条件的所有文档
5. Model.count(条件对象,function(err,count){})
     作用:该函数用来统计符合条件的文档数目

二、Document的方法

      通过Model.查询到的结果就是mongoose中新添加的Dcument文档对象,它是Model的一个实例对象。通过instanceof运算符可以检查出Document是Model的实例。Document和MongoDB数据库集合中的文档是一一对应的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值