连接
1.安装
- https://www.mongodb.com/try/download/community mongodb数据库
- mongodb可视化工具 https://www.mongodb.com/try/download/compass
- cmd中输入 mongodb -version 查看mongodb版本
- 没有出现对应版本,说明没有配置环境变量
2.配置并测试
- 在mongodb文件夹的bin目录下,cmd进入输入mongod -dbpath …/data/db(如果没有db文件夹则手动创建)开启数据库服务
- 浏览器打开http://localhost:27017查看是否启动成功
3.连接数据库
通过mongoose操作mongodb数据库
- npm i mongoose
- node项目连接mongodb数据库
- mongoose.connect(“数据库地址”) 连接数据库
- 数据库地址 => mongodb://localhost:27017/集合名称(数据集合名称)
- 默认端口是 27017
- 不存在对应集合 则会创建 - 判断连接成功
- 通过mongoose.connect返回进行 .then处理 处理是否连接成功
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
.then(() => {
console.log("数据库连接成功")
}).catch(() => {
console.log("连接失败")
})
需要注意的地方:
IPV6下会把localhost解析为::1(cmd中输入ping命令可以查看ping localhost)
mongoose
图式
所谓图式(schema),就是通过规定实体属性及其对应数据类型,创建出数据库模型的基本骨架。图式本身并不具备操作数据库的能力,仅仅是定义被操作集合字段的步骤
对字段做进一步规定,常用的选项有required(是否强制用户输入)、unique(是否不允许重复)、default(用户不输入时的默认值是什么)和trim(要不要去掉两头的空格)
模型
所谓模型(model),它是连接图式与MongoDB集合的纽带,负责实际对数据库进行读写操作
定义表规则
- new mongoose.Schema({ 参数对象 }) => 返回放入创建表中
-返回值放入对应表名称 - 对象
属性名=>表头 属性值=>数据的类型 - 数据的类型
String、Number、Boolean、Array、Object(文档中不存在,但是可以使用)、Date、Buffer
表规则对象写法
通用类型
{
type:数据类型,
default:默认值,
required:布尔值,是否是必选项
validate:{ 自定义验证
validator(val){ 接受验证数据
console.log(val);
返回false将执行message
},
message:"错"
}
}
字符串
lowercase:true 字母转出小写存储
uppercase:true 字母转出大写存储
trim:true 清除两侧空格
minlength:number 字符串长度最小
maxlength:number 字符串长度最大
enum:[组合选择其中一项] 写入的数据必须是其中一项
数字
min:number 最小值
max:number 最大值
数字转化字符串 字符串可以转出数字
_id: 唯一值,十六进制,不会重复
_v: 版本号
实例
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1:27017/luyao")
.then(()=>{
console.log("数据库连接成功")
}).catch(()=>{
console.log("数据库连接失败")
})
// mongoose.Schema定义表规则(图式)
let sch = new mongoose.Schema(
{
//属性名:属性值的类型
name:{
type: String,
default: "jiuwei"
},
ca: {
type: String,
lowercase: true,
minlength: 2,
maxlength: 5
},
sex: {
type: String,
enum: ["男","女","未知"]
},
age: Number,
arr: Array,
obj: {
type: Object,
validate: {
validator(val) {
return val.name === "luyao"
},
message: "错了"
}
}
},
{
versionKey: false //去除版本号
}
)
// model(创建表,表规则)——模型
let mongo = mongoose.model("girlfriend",sch)
// 添加数据
async function add() {
let result = await mongo.create({
name: "luyao",
ca: "YAYA",
sex: "男",
age: 18,
arr: [1,2,3,4],
obj: {
name: "luyao"
}
})
console.log(result)
}
add()