MongoDB(芒果数据库)学习(三)——Mongoose搭建及运用(Schemas、Model、Document)

MongoDB(芒果数据库)学习(三)———Mongoose搭建以及基础

一、mongoose前言

mongoose的官方网站:https://mongoosejs.com/在这里插入图片描述

简介:

  1. 之前我们通过shell完成对数据库的各种操作,但在 开发中需要程序来完数据库的(你不可能特意指派一个人去添加数据修改数据删除,那一万个人也不够用)因此操作此时使用mongoose。
  2. 使用Mongoose后,我们可以用Node来操作 MongoDB的模块。
  3. Mongoose是一个对象文档模型(ODM)库,它对 Node原生的MongoDB模块进行了进一步的优化封装, 并提供了更多的功能

优势:

1、 因为Mongodb中没有对字段进行约束,Mongoosedb可以存储任何数据类型,比如(id中存了文字等)
因此使用mongoose来管理。
2、Mongoose可以为文档创建一个模式结构(Schema)
• 可以对模型中的对象/文档进行验证
• 数据可以通过类型转换转换为对象模型
• 可以使用中间件来应用业务逻辑挂钩
• 比Node原生的MongoDB驱动更容易
3、对象
Schema(模式对象):约束文档结构
Model(模型对象):相当于mongodb的collection
Document(文档对象):具体文档

二、mongoose搭建及基础

  1. 下载安装Mongoose
    mongoose连接MongoDB
    使用命令行工具,或者vscode 的pacel工具,进入在想要建立mongoose 的路径:
    如果是新文件夹需要初始化package.json文件,否则可以不运行:
    npm init

    然后运行
    npm i mongoose --save

    或者在vscode中运行都可以
    在这里插入图片描述
    最后安装成功!
  2. 检查安装包
    在下载完成的node_modules下会有mongoose包,里面就都是mongoose的应用函数方法等。在这里插入图片描述
  3. 连接Mongoose数据库
    新建js文件,在package.json的同级目录下,否则连接不上
    在保证 npm install已经安装,并且npm i mongoose也成功执行后。
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test");
mongoose.connection.once("open",function(){
   console.log("数据库连接成功");
})

mongoose.connection.once("close",function(){
   console.log("数据库已经断开"); 
})
//mongoose.disconnect();

写入js文件后,点击run code 运行。
在这里插入图片描述
会提示数据库连接成功,一般的我们的数据库只需连接一次就可以。除非项目停止服务器关闭否者我们的服务器不需要断开。
代码中只有上面的一行起到了连接数据库的作用。
在mongoose的对象中,connection起到了监听的作用。

三、moogose 的运用

1、Schemas

自定义你的Schemas对象
这是官方用法

//new Schema(definition,option) 
//definition(描述模式) 
//options 配置对象,定义与数据库中集合的交互
 var mongoose = require('mongoose');
 var Schema = mongoose.Schema;

 var blogSchema = new Schema({
   title:  String, // String is shorthand for {type: String}
   author: String,
   body:   String,
   comments: [{ body: String, date: Date }],
   date: { type: Date, default: Date.now },
   hidden: Boolean,
   meta: {
     votes: Number,
     favs:  Number
   }
 });

如下我的代码

var mongoose = require("mongoose");
//将mongoose.Schema 赋值一个变量
var Schema = mongoose.Schema;

//创建Schema(模式)对象
var dateSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
})
//通过Schema创建Model   有了数据库

现在我们的Schemas模型已经创建好。
常用创建格式有:

 String – Number – Boolean – Array – Buffer – Date – ObjectId –Oid – Mixed 

常用的option如下:

autoIndex 				– 布尔值,开启自动索引,默认true 
bufferCommands 			– 布尔值,缓存由于连接问题无法执行的语句,默认true 
capped 					– 集合中最大文档数量 
collection 				– 指定应用Schema的集合名称
id 						– 布尔值,是否有应用于_id的id处理器,默认true 
_id 					– 布尔值,是否自动分配id字段,默认true 
strict 					– 布尔值,不符合Schema的对象不会被插入进数据库,默认true

2、Model

在Schemas模型创建好之后,我们创建Model去 插入数据

//通过Schema创建Model   有了数据库
//Model代表数据库集合  对数据库操作
//var Blog = mongoose.model('Model', blogSchema);
//Blog 就是要映射的集合名
var empModel = mongoose.model("emp",dateSchema);

//向数据库中插入一个文档
empModel.create({   
 name:"鸣人",
 age:17,
 gender:"male",
 address:"木叶忍者村"
},function(err){
 if(!err){
     console.log("载入数据成功~~~");
 }
})

在连接数据库的代码下输入以上命令,然后执行,(在以后的教程中会有explore,导出不同功能的代码段,就不用写到一起了)然后会在控台中看到,载入数据成功
在这里插入图片描述
我们使用studio3T查看数据库,发现数据已经存入了。
在这里插入图片描述
但是我们在这里需要注意:使用mongoose,创建空表的时候我们的表名会自动的被添加为复数"s",比如新建emp则变为emps或者当我们起的表名有s时,则不会被添加"s"。在这里插入图片描述
mode的常用方法有:

remove(conditions, callback)deleteOne(conditions, callback)findOne(conditions, projection, options, callback)count(conditions, callback)findById(id, projection, options, callback)deleteMany(conditions, callback)find(conditions, projection, options, callback)create(doc, callback)update(conditions, doc, options, callback) 

使用实例:在Model创建好的基础上
在这里插入图片描述

3、Document

通过Model对数据库进行查询时,会返回 Document对象或Document对象数组。
Document继承于Model,代表一个集合中的文档。
Document对象也可以和数据库进行交互 操作。

  1. save
    这里我们前两步骤:连接到数据库,创建完Schema的对象基础上,创建一个document文件,然后执行save方法将数据成功保存在数据库中。
    在这里插入图片描述
  2. update
    同时我们也可以修改数据:
    以下全部代码
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test");
mongoose.connection.once("open",function(){
    console.log("数据库连接成功");
})
mongoose.connection.once("close",function(){
    console.log("数据库已经断开"); 
})
//mongoose.disconnect();
//将mongoose.Schema 赋值一个变量
var Schema = mongoose.Schema;
//创建Schema(模式)对象
var dateSchema = new Schema({
    name:String,
    age:Number,
    gender:{
        type:String,
        default:"female"
    },
    address:String
})
var empModel = mongoose.model("emp",dateSchema);

empModel.findOne({},function(err,doc){
    if(!err){    
        doc.update({$set:{age:24}},function(err){
            if(!err){
                console.log("修改成功!");
            }})
}});

运行之后可以看到:
在这里插入图片描述
在数据库查看数据,可以发现数据已经被修改成功。
但只可以更正一条数据。
在这里插入图片描述
关于doc还可以这样使用:

在数据库中检索也会发生变化:
在这里插入图片描述
还有document的常用方法有:

equals(doc) 
• id 						 • get(path,[type])set(path,value,[type])update(update,[options],[callback])save([callback])remove([callback]) 
• isNew 					 • isInit(path)toJSON()toObject()
console.log(doc.toObject());			将其转化为对象显示。
针对不想显示的对象字段可以delete doc.gender; 就会不显示其字段。
console.log(doc.id());					输出起id。
console.log(doc.get("name"));  			输出数据的name名字。

四、结语

没有礁石的阻挡,哪有浪花的激越;
没有羚羊的快捷,哪有猎豹的英姿;
有了风的拥抱,帆张开了胸膛;
有了雪的映衬,梅越加冷艳高洁。人生的路上,我们时时被挫折环伺,被失败包围。
让我们越挫越勇,越败越强,只要不倒下,只要不溃退,失败和挫折就如垫脚石,增加我们的高度,厚重我们的人生。。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值