MongoDB(芒果数据库)学习(三)———Mongoose搭建以及基础
一、mongoose前言
mongoose的官方网站:https://mongoosejs.com/
简介:
- 之前我们通过shell完成对数据库的各种操作,但在 开发中需要程序来完数据库的(你不可能特意指派一个人去添加数据修改数据删除,那一万个人也不够用)因此操作此时使用mongoose。
- 使用Mongoose后,我们可以用Node来操作 MongoDB的模块。
- Mongoose是一个对象文档模型(ODM)库,它对 Node原生的MongoDB模块进行了进一步的优化封装, 并提供了更多的功能
优势:
1、 因为Mongodb中没有对字段进行约束,Mongoosedb可以存储任何数据类型,比如(id中存了文字等)
因此使用mongoose来管理。
2、Mongoose可以为文档创建一个模式结构(Schema)
• 可以对模型中的对象/文档进行验证
• 数据可以通过类型转换转换为对象模型
• 可以使用中间件来应用业务逻辑挂钩
• 比Node原生的MongoDB驱动更容易
3、对象
Schema(模式对象):约束文档结构
Model(模型对象):相当于mongodb的collection
Document(文档对象):具体文档
二、mongoose搭建及基础
- 下载安装Mongoose
mongoose连接MongoDB
使用命令行工具,或者vscode 的pacel工具,进入在想要建立mongoose 的路径:
如果是新文件夹需要初始化package.json文件,否则可以不运行:
npm init
然后运行
npm i mongoose --save
或者在vscode中运行都可以
最后安装成功! - 检查安装包
在下载完成的node_modules下会有mongoose包,里面就都是mongoose的应用函数方法等。 - 连接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对象也可以和数据库进行交互 操作。
- save
这里我们前两步骤:连接到数据库,创建完Schema的对象基础上,创建一个document文件,然后执行save方法将数据成功保存在数据库中。
- 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名字。
四、结语
没有礁石的阻挡,哪有浪花的激越;
没有羚羊的快捷,哪有猎豹的英姿;
有了风的拥抱,帆张开了胸膛;
有了雪的映衬,梅越加冷艳高洁。人生的路上,我们时时被挫折环伺,被失败包围。
让我们越挫越勇,越败越强,只要不倒下,只要不溃退,失败和挫折就如垫脚石,增加我们的高度,厚重我们的人生。。