准备工作
首先需要确保已经启动了 MongoDB,如果没有启动以管理员身份
运行cmd
net start mongoDB
其次需要安装第三方模块
npm install mongoose
并将其引入
const mongoose = require(‘mongoose’);
数据库的相关概念
术语 | 解释 |
---|---|
database | 数据库(数据仓库) |
collection | 集合,一组数据的集合,可以理解为js里的数组 |
document | 文档,一条具体的数据,可以理解为js的里对象 |
field | 字段,文档中的属性名称,可以理解为js里的对象属性 |
在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,在每一个数据集合中也可以包含多条文档(具体的数据),而每个集合里面又可以包含多个字段
从下面的图片具体来看
- 数据仓库有:admin、config、local(这三个是软件自带的)、playground(自己创建的)
- 集合(以playground为栗):posts、students、tests、users
- 文档:下图中右侧有3条文档
- 字段:_id(软甲自己创建的,是这条数据的唯一标识)、name、age、email
与数据库进行连接
mongose.connect('mongodb://localhost/playground', {
useNewUrlParser: true
})
.then(() => console.log('数据库连接成功'))
.catch(err => {
console.log(err);
console.log('数据库连接失败');
});
当你正在使用一个数据库时,如果该数据库不存在的话,那么MongoDB将会自动创建该数据库。另外如果只创建了数据库而没有给数据库里面添加数据的话,那么你刷新了MongoDB Compass
也不会看到这个数据库,因为里面没有集合(也就是没有数据)
扫描二维码关注公众号,回复:
9916693 查看本文章
创建集合
创建集合可以分为两步:
1.对集合设定相应的规则,也就是你创建的这条数据(文档)里面包含哪些内容(对象),这些内容有什么要求
2.根据规则创建集合
//创建规则
let userSchema = new mongose.Schema({
name: String,
age: Number,
hobbies: [String]
});
//根据规则创建集合
//这里要写大写字母,但是在软件中你会看到小写并加了s
let User = mongose.model('User', userSchema); //users
创建文档(具体数据)
创建文档有两种方法
// 创建文档的第一种方法
let data = {
name: '张三',
age: 19,
hobbies: ['跑步', '睡觉']
};
let person1 = new User(data);
//将数据保存到数据库中1
person1.save();
// 创建文档的第二种方法
//对返回结果的处理方式
User.create(data, (err, doc) => {
if(!err) {
console.log(doc);
} else {
console.log(err);
}
});
//我感觉还是这一种看着舒服(嘿嘿~~~~)
User.create(data)
.then(doc => {
console.log(doc);
})
.catch(err => {
console.log(err);
});
查询文档(数据)
//根据条件查找文档,如果条件为空则查询所有数据
//返回的是一个数组,数组里的每一项为一个对象
//查询名叫张三的
User.find({name: '张三'}).then(result => console.log(result));
//查找年龄大于20小于30的
User.find({age: {$gt: 20, $lt: 40}}).then(result => console.log(result));
// 返回的是一个对象,默认返回当前集合中的第一条文档
User.findOne({name: '张三'}).then(result => console.log(result));
//对查找到的数据进行处理
// 查询所有数据中的指定字段
User.find().select('name email -_id').then(result => console.log(result));
// 根据年龄字段进行升序排列
User.find().sort('age').then(result => console.log(result));
// 根据年龄字段进行降序排列
User.find().sort('-age').then(result => console.log(result));
// 查询的数据跳过前两条结果 限制显示5条结果,通常用于数据的分页显示
User.find().skip(2).limit(5).then(result => console.log(result));
删除文档(数据)
// 查找到一条文档并且删除
// 返回删除的文档,如果查询到多条文档,那么将会删除第一条
User.findOneAndDelete({name: '张三'}).then(result => console.log(result));
// 删除多条文档,没有条件则删除调所有的数据
User.deleteMany({}).then(result => console.log(result));
更新文档
// 更新一条数据
// 第一个参数:要更那条数据
// 第二个参数:更新那些内容
User.updateOne({name: '李四'}, {name: '李狗蛋' ,age: 28, }).then(result => console.log(result));
// 更新多个数据
User.updateMany({}, {age: 66}).then(result => console.log(result));
啦啦啦
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground')
.then(() => console.log('数据库连接成功'))
.catch(err => console.log('数据库连接失败'))
let bookSchema = mongoose.Schema({
name: {
type: String,
required: [true, '请输入书的名称'],
minlength: [2, '名称长度不能少于2个字'],
maxlength: [20, '文章长度不能大于20个字'],
trim: true
},
author: {
type: String,
validate: {
validator: value => {
// 返回布尔值
// true 验证成功
// false 验证失败
// value 要验证的值
return value && value.length > 4
},
//自定义错误信息
message: '不符合规定'
}
},
category: {
type: String,
enum: {
values: ['html', 'css', 'js'],
message: '没有该类别'
}
},
num: {
type: Number,
min: [0, '不能少于0本'],
max: [100, '不能多于100本']
},
publishDate: {
type: Date,
default: Date.now
}
});
let Book = mongoose.model('Book', bookSchema);
Book.create({name: ' JavaScript程序设计 ', author: 'he', category: 'jss', num: 8,})
.then(doc => console.log(doc))
.catch(error => {
// 获取错误信息对象
const err = error.errors;
// 循环错误信息对象
for (var attr in err) {
// 将错误信息打印到控制台中
console.log(err[attr]['message']);
}
})