1.下载mongoose
2.连接数据库
const mongoose = require('mongoose')
//连接数据库
mongoose.connect('mongoose://localhost/zyf',{ useNewUrlParser: true})
//连接成功
.then(()=>{console.log('数据库连接成功')})
//连接失败
.catch(err=>{console.log(err,'数据连接失败')})
3.创建文档
第一种方式
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/zyf',{useUnifiedTopology: true,useNewUrlParser: true}).then(()=>{console.log('数据库连接成功')}).catch((err)=>{if(err!=null){console.log('数据库连接失败')}})
//1.创建集合规则
const coureseSchema = mongoose.Schema({
name:String,
author:String
})
//2.使用规则创建集合
const Course = mongoose.model('Course',courseSchema) //courses
//3.创建文档
const course = new Course({
name:'node.js基础',
author:'黑马讲师',
})
//将文档插入到数据库中
course.save()
第二种方式
//引入第三方模块
const mongoose = require('mongoose');
//连接数据库
mongoose.connect('mongodb://localhost/aiqi',{ useNewUrlParser: true, useUnifiedTopology: true });
//创建集合规则
const courseSchema = mongoose.Schema({
job:String,
author:String
});
//创建集合
const Course = mongoose.model('course',courseSchema);
//数据插入数据库
Course.create({job:'IT',author:'aiqi'}).then((data)=>{console.log(data)})
4.查数据库
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/class')
const userSchema = new mongoose.Schema({
name: String,
age: Number,
email: String,
password: String,
hobbies: [String]
})
const user = mongoose.model('users',userSchema)
//没有条件默认查全部
user.find().then(data=>{console.log(data)})
//findOne只查询一条数据,没有查询条件默认输出第一条数据
user.findOne({name:'zyf'}).then(data=>{console.log(data)})
//$gt 大于 $lt小于
user.find({age:{$gt:12,$lt:33}}).then(data=>{console.log(data)})
//$in 包含
user.find({hobbies:{$in:['足球']}}).then(data=>{console.log(data)})
//select()显示指定字段,在字段前面加-可以去掉该字段查询
user.find().select('name age -id').then(data=>{console.log(data)})
//sort() 可以对查询结果指定字段进行排序,在字段前加-为降序
user.find().sort('-age').then(data=>{console.log(data)})
//skip() 跳过前几位进行显示 limit限制显示几位
user.find().skip(2).limit(3).then(data=>{console.log(data)})
5.删除数据库里面的数据
const mongoose = require('mongoose')
mongoose.connect('mongodb:localhost/user')
const userSchema = new mongoose.Schema({
name: String,
age: Number,
email: String,
password: String,
hobbies: [String]
})
const user = mongoose.model('users',userSchema)
//删除匹配第一条数据
user.findOneAndDelete({name:'张三'}).then(data=>{console.log(data)})
//删除多条数据
user.deleteMany({age:{$gt:11}}).then(data=>{consoole.log(data)})
6.更新数据库
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/class')
const userSchema = new mongoose.Schema({
name: String,
age: Number,
email: String,
password: String,
hobbies: [String]
})
const user = mongoose.model('users',userSchema)
//修改多条数据updateMany(匹配条件,修改内容)
user.updateMany({age:20},{age:333,name:'zyf'}).then(data=>{console.log(data)})
//修改单条数据updateOne(匹配条件,修改内容)
user.updataOne({age:10},{age:555,name:'qi'}).then(data=>{console.log(data)})
7.数据库数据检验
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/class',{ useUnifiedTopology: true,useNewUrlParser: true })
const zyf = new mongoose.Schema({
title:{
type:String,
//必填
required:[true,'数据必填'],
//字符串最长长度
maxlength:[18,'长度不能超过18']
//字符串最小长度
minlength:[0,'长度不能小过0'],
//去掉两边空格
trim:true
},
age:{
type:Number,
//最小值
min:[0,'数据不能小过0'],
//最大值
max:[100,'数据不能超过100'],
},
publishDate:{
type:Date,
//默认值
defalut:Date.now
},
category:{
type:String,
//枚举,列举数据取值的内容
enum:{
values:['aiqi','zyf'],
message:'超过允许的内容'
}
},
//自定义检验
author:{
type:String,
validate:{
validator:data=>{
//得返回Boolean值
return data&&data.length>4
},
message:'长度不能超过4'
}
}
})
const zyfcoures = mongoose.model('zyfCoures',zyf)
zyfcoures.create({title:' 1222 ', age: 60, category: 'java', author: 'bd'}).then(data=>{console.log(data)})
.catch(error=>{
const err = error.errors
//输出错误信息
for(let attr in err){
console.log(err[attr]['message'])
}
})
8.数据库关联字段
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/class',{useUnifiedTopology: true,useNewUrlParser: true})
const userSchema = new mongoose.Schema({
name:String,
age:Number
})
const postSchema = new mongoose.Schema({
title:String,
author:{
//通过objectId进行关联
type:mongoose.Schema.Types.ObjectId,
//关联哪个集合对象
ref:'User',
}
})
const User = mongoose.model('User',userSchema)
const Post = mongoose.model('Post',postSchema)
// User.create({name:'aiqi',age:18})
//插入数据时需要写ID
Post.create({title:'123',author:'60aa168e394c173e1423bd47'}).then(data=>{console.log(data);})
//通过populate查询关联字段的数据
Post.find({title:'123'}).populate('author').then((data)=>{
const {author} = data[0];
console.log(author);
})