1,启动数据库服务:net start mongodb
2,终止数据库服务:net stop mongodb
3,先再当前文件夹下下载插件: npm install mongoose
3,再js文件中导入模块:const mongoose=require('mongoose');
4,创建数据库连接
mongoose.connect('mongodb://localhost/dejin',{useNewUrlParser:true })
.then(()=>console.log('数据库连接成功'))
.catch(err=>console.log('数据库连接失败',err));
插入数据
1,需要先创建一个集合规则
const courseSchema=new mongooes.Schema({
name:string,
name2:string
})//创建一个集合规则,里面传一个对象,这个对象就是你以后常见数据的格式
2,使用集合规则创建模板
const Course=mongooes.model('Course',courseSchema);
//将架构生成一个模板,后面使用这个模板就可以生成数据;参数:模板名称,模板规则
3,创建数据
- 使用构造函数的方式创建
const course=new Course({
name:'node.js',
author: '得劲',
isPublished: true
});
course.save(); //注意:使用这种方式需要手动调用这个方法将数据插入到数据库中
- 使用create方法创建
Course.create({name:'node.js', author: '得劲', isPublished: true},(err,doc)=>{
console.log(err); //如果插入失败,会打印一个对象,成功打印一个null
console.log(doc);//插入成功打印你插入的数据,失败为null
})
//使用这种方式可以有一个回调函数,所以是一个异步函数,所以能使用Promise的方法,
// 通过Promise的方式可以拿到返回结果
Course.create({name: 'javascript123',author: 'laowang',isPublished: false})
.then(doc=>console.log(doc))
.catch(err=>console.log(err));
数据库导入数据
1,需要先配置系统环境变量,再path中添加MongoDB安装的路径,然后再Windows PowerShell中导入
2,导入方法 mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件地址
mongoimport -d playground -c users --file ./user.json
导入完成
查询文档
const User=mongooes.model('User',userSchema);
//查询User中的所有文档(数据),返回的是一个数组,数组里的每一项都是对象
// User.find().then(doc=>console.log(doc));
//跟据你的条件查找文档,返回的是一个数组,数组里的每一项都是对象
// User.find({age:14}).then(doc=>console.log(doc));
//findOne()方法返回一个对象,默认为当前集合的第一条,返回的是一个对象
// User.findOne().then(doc=>console.log(doc));
//在findOne()里传一个对象,返回符合条件的哪一个对象,返回的是一个对象
// User.findOne({name:'李四'}).then(doc=>console.log(doc));
//查询一个范围的文档方法
//匹配大于 小于 ;查询年龄大与20,小于50的格式
// User.find({age:{$gt:20,$lt:50}}).then(doc=>console.log(doc));
//匹配包含
// User.find({hobbies:{$in:['敲代码']}}).then(doc=>console.log(doc));
//查询字段,只打印出你所需要的字段,并非整个对象
// User.find().select('name email -_id').then(doc=>console.log(doc));
//将数据进行升序排序
// User.find().sort('age').then(doc=>console.log(doc));
//将数据进行降序排序
// User.find().sort('-age').then(doc=>console.log(doc));
//skip跳过多少体条数据,select限制查询数量
User.find().skip(2).limit(2).select('name age -_id').then(doc=>console.log(doc));
删除数据
//删除一个符合条件的文档,如果匹配了多个文档,那么将会删除第一条文芳
// User.findOneAndDelete({name:'王五'}).then(doc=>console.log(doc));
//删除多个文档
// User.deleteMany({hobbies:{$in:['足球']}}).then(doc=>console.log(doc));
//如果deleteMany里面对象不写参数,会删除全部的数据
// 删除多个文档会返回一个对象,{ n: 2, ok: 1, deletedCount: 2 }
// n删除个数,ok为1标识删除成功
更改数据
//更新集合中的文档,(一个)
// 两个参数为对象,第一个是找到符合这条数据的对象,第二个是更换的数据
// User.updateOne({name:'李四'},{name:'李狗蛋'}).then(doc=>console.log(doc));
//更新多个文档(更新多个),需要注意,如果前面的对象一个参数都不传会修改全部
User.updateMany({},{age:18}).then(doc=>console.log(doc));
//只修改匹配的多个数据
//User.updateMany({name: ['王五','王二麻子']},{age:18}).then(doc=>console.log(doc));
数据验证
在创建集合规则时,可以设置当前字段的验证规则,验证失败就输入失败
required:true 设置必须输入该项,否者会报错
minlength: n,maxlength: n 字符串的最大长度与最小长度
min: n,max: n ;数字的最大与最小
enum:['html','css','javascript','node.js'] 预定义分类,如果不是这里面的值的化会报错
trim:true ,去除字符串两边的空格
validate:自定义验证器,是一个对象
default: 默认值,如果用户没有输入这个值时则会使用这个值
一段完整的验证格式
const postSchema=new mongooes.Schema({
title:{
//设置类型
type:String,
//必选字段,后面是如果你没写报错的提示信息
required:[true,"请传入文章标题"],
//字符串最大长度
maxlength:[5,'标题长度不能超过5个字'],
//最小长度
minlength:[2,'标题长度不能小于2'],
//去掉前后空格
trim:true
},
age:{
type: Number,
required: [true,'请输入年龄'],
//设置数值最大不能超过100
max:[100,'年龄最大不能大于100'],
//最小不能小于18
min:[18,'年龄最小不能小于18']
},
//发布日期
publishDate:{
type:Date,
//如果这个值没有传入,默认会给你生成一个当前时间
default:Date.now
},
//类别
category:{
type:String,
//传入分类只能为以下值
enum:{
values:['html','css','node.js','javascript'],
message: "分类名称应为'html','css','node.js','javascript'"
}
},
author:{
type:String,
//自定义验证规则
validate:{
//验证函数,v就是author的值
validator: v=> {
return v && v.length > 5;//返回一个boolean值
},
message:'输入的值不符合规则'
//message为报错提示信息
}
}
});
获取报错信息
如果用户并不是按照你所设定的规则取创建文档,那么可以回去相应的报错信息,然后再取提示他们
获取报错信息代码
Post.create({title: 'dejkin',age: 241,category: 'node.jfs' })
.then(doc=>console.log(doc))
.catch(error=>{
const err=error.errors;
for(var attr in err){
console.log(err[attr]['message']);
}
});
集合关联
就是通过id来进行关联,再一个集合里面的某一条数据的一个小信息是另外一个集合中某一条数据的id,通过这个id可以关联到另外一个集合里的一条数据
如下代码:
const mongooes=require('mongoose');
mongooes.connect('mongodb://localhost/playground',{useNewUrlParser: true}).then(()=>console.log('数据库连接成功')).catch(err=>console.log(err,'数据库连接失败'));
const userSchema=new mongooes.Schema({
name:{
type:String,
required:true
},
age:Number
});
const postSchema=new mongooes.Schema({
title:{
type: String,
required: true
} ,
author:{
//使用id将文章集合和作者集合进行关联
type: mongooes.Schema.Types.ObjectId,
ref:"User",
required:true
}
});
const User=mongooes.model('User',userSchema);
const Post=mongooes.model("Post",postSchema);
// User.create({name:'dejin',age: 21}).then(doc=>console.log(doc));//第一步
// Post.create({title: 'debudejin',author:'5d5514b9b361015a98b680e2' }).then(doc=>console.log(doc));//第二步
Post.findOne().populate('author').then(doc=>{ //第三步
let user=doc.author;
console.log(user.name)});