_node中的Mongoose
一. __MongoDB
1.关系型和非关系型数据库
- 所有的关系型数据库都需要通过
SQL
语言来操作 - 所有的关系型数据库在操作之前都需要设计表结构
- 而且数据表还要支持约束(唯一,逐渐,默认值,非空)
- 非关系型数据库非常灵活
- 有的非关系数据库就是key-value对
2. MongoDB数据库
- 长得最像关系型数据库的非关系型数据库
- 不需要设计表结构
基本概念:
- 可以有多个数据库
- 一个数据库中可以有多个集合(表)
- 一个集合中可以有多个文档(表记录)
- 文档结构很灵活,没有任何限制
- MongoDB非常灵活,不需要像MySQL一样先创建数据库,鸟,设计结构(当你需要插入数据的时候只需要指定往那个数据库的那个集合操作就可以,一切都有MongoDB来帮你自动完成建库建表)
{
qq:{
users:[
{数据},
{数据},
{数据},
...
],
products:[
],
...
},
taobao:{
},
baidu:{
},
...
}
2.1安装
mongod --vesiws
# 检测是否安装成功
2.2启动和关闭数据库
启动:
# mongodb 默认执行mongod 命令所处data/db作为自己的数据存储目录
mongod
如果想要修改默认的数据存储目录,可以
mongod --dbpath=数据存储目录路径
2.3连接和退出数据库
连接:
# 该命令默认连接本机的MongoDB服务
mongo
退出
# 在连接状态下输入EXIT退出连接
exit
2.4基本指令
# 查看显示所有数据库
show dbs
show databases
# 查看当前操作的数据库
db
# 选择和创建数据库(不存在创建,存在选择)
# 存在在内存中,不会持久化到磁盘中(当数据库为空时)
use 数据库名称
# 命名规则:不能是空字符串,不能含(空格.$/\),全部为小写,最多64字节
show collections
db.students.insetrOne({})
二. 在express中使用(必须先开启服务器)
- Schema: 相当于一个数据库的模板. Model可以通过mongoose.model 集成其基本属性内容. 当然也可以选择不继承.
- Model: 基本文档数据的父类,通过集成Schema定义的基本方法和属性得到相关的内容.
- instance: 这就是实实在在的数据了. 通过 new Model()初始化得到.
基本类型
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
mongoose
1.安装插件
npm i -S mongoose
2.使用
//导入mongoose模块
var mongoose = require('mongoose')
//数据库模板
var Schema = mongoose.Schema
//连接数据库
mongoose.connect('mongodb://localhost/itcast')
//建立studentSchema表结构
var studentSchema = new Schema({
name:{
type:String,
required:true
},
gender:{
type:Number,
enum:[0,1],
default:0
},
age: {
type: Number
},
hobbies:{
type:String
}
})
//导出Student
module.exports = mongoose.model('Student', studentSchema)
3.基本指令
3.1 增加数据
//方法1
var admin = new User({
username: 'uziisgod',
password: '123456',
email: 'uziisgod@qq.com'
})
admin.save(function (err, ret) {
if (err) {
console.log('失败');
}
else {
console.log('成功');
console.log(ret);
}
})
//方法2
new User({
username: 'uziisgod',
password: '123456',
email: 'uziisgod@qq.com'
}).save(function(err){
if (err) {
console.log('失败');
}
else {
console.log('成功');
}
})
3.2 查询数据
//整体查询(返回数组)
Student.find(function (err, ret) {
if (err) {
console.log('失败');
}
else {
console.log('成功');
console.log(ret);
}
})
//条件查询(返回数组)
User.find({
username: 'liuzhenxing'
}, function (err, ret) {
if (err) {
console.log('失败');
}
else {
console.log('成功');
console.log(ret);
}
})
//只查找一个(返回对象)
//条件查询
User.findOne({
username: 'liuzhenxing'
}, function (err, ret) {
if (err) {
console.log('失败');
}
else {
console.log('成功');
console.log(ret);
}
})
//整体查询
User.findOne(function (err, ret) {
if (err) {
console.log('失败');
}
else {
console.log('成功');
console.log(ret);
}
})
3.3 删除数据
//根据信息删除
User.remove({
username: 'admin'
}, function (err) {
if (err) {
console.log('失败');
} else {
console.log('成功');
}
})
//根据ID删除
User.findByIdAndRemove('60279e34f4fe6639704567c9', function (err) {
if (err) {
console.log('失败');
}
})
3.4 更新数据
User.findByIdAndUpdate('60279c4c88e66332f460efd1', {
password: 'rm513142'
}, function (err, ret) {
if (err) {
console.log('失败');
} else {
console.log('成功', ret);
}
})