数据库概述及环境搭建
在一个数据软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合可以包含多条文档(具体的数据)
datebase
数据库,mongodb数据软件中可以建立多个数据库
collection
集合,一组数据的集合,可以理解为javascript数组
document
文档,可以理解为javascript中的对象
field
字段文档中属性的名称,可以理解为javascript中的对象属性
node连接mongodb
首先确保是否已经启动mongdb
在命令工具中运行这个命令,即可启动mongodb,否则mongodb将无法连接
net start mongoDB
关闭mongodb
net stop mongodb
const MongoClient = require('mongoose');
MongoClient.connect('mongodb://localhost/playground',{useUnifiedTopology: true,useNewUrlParser: true})
.then(()=>{
console.log("数据库连接成功");
}).catch(err=>{
console.log(err,"数据库连接失败");
})
mongodb增删查改操作
创建集合插入数据
const MongoClient = require('mongoose');
//数据库连接
MongoClient.connect('mongodb://localhost/playground',{useUnifiedTopology: true,useNewUrlParser: true})
.then(()=>{
console.log("数据库连接成功");
}).catch(err=>{
console.log(err,"数据库连接失败");
})
//设置集合(表)规则(设置表里的字段)
const courseSchema = new MongoClient.Schema({
name:String,
author:String,
isPublished:Boolean
})
const Course = MongoClient.model('Course',courseSchema) //Courses 首字母大写创建自动加s -----返回构造对象
//默认不插入数据数据库,和集合不创建
//插入数据
// Course.create({name:'javascript',author:'yj',isPublished:false},(err,result)=>{
// console.log(err);
// console.log(result);
// })
Course.create({name:'vue',author:'yj',isPublished:false}).then(result=>{
console.log(result);
}).catch(err=>{
console.log(err);
})
查询
const MongoClient = require('mongoose');
//数据库连接
MongoClient.connect('mongodb://localhost/playground',{useUnifiedTopology: true,useNewUrlParser: true})
.then(()=>{
console.log("数据库连接成功");
}).catch(err=>{
console.log(err,"数据库连接失败");
})
//设置集合(表)规则(设置表里的字段)
const courseSchema = new MongoClient.Schema({
name:String,
author:String,
age:Number,
isPublished:Boolean
})
const Course = MongoClient.model('Course',courseSchema) //Courses 首字母大写创建自动加s -----返回构造对象
// Course.create({name:'react',author:'yj',age:18,isPublished:false})
// Course.find().then(res=>{
// console.log(res);
// }).catch(err=>{
// console.log(err);
// })
// Course.find({_id:'5fe072f747590814d48c15f7'}).then(res=>{
// console.log(res);
// }).catch(err=>{
// console.log(err);
// })
//默认为第一条
// Course.findOne({name:'yj'}).then(res=>{
// console.log(res);
// }).catch(err=>{
// console.log(err);
// })
// $gt 大于 小于 $lt
// Course.find({age:{$gt:15,$lt20}}).then(res=>{
// console.log(res);
// }).catch(err=>{
// console.log(err);
// })
//包含 $in
// Course.find({author:{$in:['杨']}}).then(res=>{
// console.log(res);
// })
//指定查询 //默认连带_id //若不想查询加-
// Course.find().select('author name -_id').then(res=>{
// console.log(res);
// })
//根据内容升序排列
// Course.find().sort('age').then(res=>{
// console.log(res);
// })
//降序排列
// Course.find().sort('-age').then(res=>{
// console.log(res);
// })
// skip 跳过几个 limit限制查询几个
Course.find().skip(2).limit(1).then(res=>{
console.log(res);
})
删除
const MongoClient = require('mongoose');
//数据库连接
MongoClient.connect('mongodb://localhost/playground',{useUnifiedTopology: true,useNewUrlParser: true})
.then(()=>{
console.log("数据库连接成功");
}).catch(err=>{
console.log(err,"数据库连接失败");
})
//设置集合(表)规则(设置表里的字段)
const courseSchema = new MongoClient.Schema({
name:String,
author:String,
age:Number,
isPublished:Boolean
})
const Course = MongoClient.model('Course',courseSchema) //Courses 首字母大写创建自动加s -----返回构造对象
//删除单个
// Course.findOneAndDelete({_id:'5fe077a194eadf2f6c1c48ff'}).then(res=>{
// console.log(res);
// })
//删除多条数据
// Course.deleteMany({}).then(res=>{
// console.log(res);
// })
更新
const MongoClient = require('mongoose');
//数据库连接
MongoClient.connect('mongodb://localhost/playground',{useUnifiedTopology: true,useNewUrlParser: true})
.then(()=>{
console.log("数据库连接成功");
}).catch(err=>{
console.log(err,"数据库连接失败");
})
//设置集合(表)规则(设置表里的字段)
const courseSchema = new MongoClient.Schema({
name:String,
author:String,
age:Number,
isPublished:Boolean
})
const Course = MongoClient.model('Course',courseSchema) //Courses 首字母大写创建自动加s -----返回构造对象
//更新一条数据,两个参数(1.查询条件,2.修改内容)
// Course.updateOne({_id:'5fe1670fcd0d2e365c47cfde'},{name:'mongodb'}).then(res=>{
// console.log(res);
// })
//更新多条数据
// Course.updateMany({},{age:18}).then(res=>{
// console.log(res);
// })
验证规则
const MongoClient = require('mongoose');
//数据库连接
MongoClient.connect('mongodb://localhost/playground',{useUnifiedTopology: true,useNewUrlParser: true})
.then(()=>{
console.log("数据库连接成功");
}).catch(err=>{
console.log(err,"数据库连接失败");
})
//设置集合(表)规则(设置表里的字段)
const postSchema = new MongoClient.Schema({
title:{
type:String,
required:[true,"请传入文章标题"], //必填
minlength:[2,'文章长度不能小于2'], //最小长度
maxlength:[5,'文章长度不能大于5'], //最大长度
trim:true //去除空格
},
age:{
type:Number,
min:18, //数字最小范围
max:80, //数字最大范围
},
publishDate:{
type:Date,
default:Date.now //默认值
},
categroy:{
type:String,
enum:{
values:['html','css','js','vue','react'],
message:'分类名称要在一定的范围才可以!'
}
},
author:{
type:String,
validate:{
validator:v=>{
//返回布尔值
// true验证成功
// false验证失败
return v && v.length>4
},
message:'传入的值不符合验证规则'
}
}
})
const Post = MongoClient.model('Post',postSchema) //Courses 首字母大写创建自动加s -----返回构造对象
Post.create({title:'大侠',age:19,categroy:'java',author:'bd'}).then(res=>{
console.log(res);
}).catch(err=>{
// console.log(err.errors);
for(var attr in err.errors){
console.log(err.errors[attr]['message'])
}
})