mongoose
1.momgoDB数据库的基本概念
mongoDB数据库由以下三个部分组成
- 数据库
- 可以有多个数据库
- 集合
- 一个数据库可以有多个集合
- 文档
- 一个集合可以有多个文档
- 不需要和mySQL一样先建立数据库,设计表结构
- 在这里,当需要插入数据的时候,只需要指定往哪个集合中插入就行了
可以认为mongoDB就是一个大的对象,存储着不同的数据的对象
对象里面就是一个个集合,可以理解为数组,如qq对象中的user集合,其实就是数组.集合里存储的是对象,这一个一个对象就是文档
所以说 数据库
包含 集合
, 集合
包含 文档
其中的文档没有结构性,可以随意写
但是在实际使用过程中不可能这样,我们可以要求对象必须有name 必须有age等等属性
以下的内容就可以当做是mongoDB的一个存储结构
{
qq: { # 数据库qq
users: [ # 集合user
{name: '张三', age: 18}, # 集合下的文档
{name: '李四', age: 18},
{name: '张三', age: 18},
{name: '张三', age: 18},
{name: '张三', age: 18},
],
products: [
]
}
Taobao: {
}
baidu: {
}
}
2. 起步
npm i mongoose
hello world
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
const Cat = mongoose.model('Cat', { name: String });
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
数据库的基本功能和数据库的基本操作步骤
- 引包
const mongoose = require('mongoose')
const Schema = mongoose.Schema
- link database
指定链接的数据库不需要事先存在,当插入第一个数据库的时候就会自动创建
mongoose.connect('mongodb://localhost/test')
- 设计集合(在mySQL中是表)结构
设计集合结构需要以下内容
- 字段结构(就是表结构中的属性名称)
- 值类型
这样对集合结构的约束是为了保证数据的完整性,保证数据库没有脏数据
const userSchema = new Schema({//这就创建了一个集合结构
username: {
type: String,//值的类型
required: true//表示本属性必须要有
},
password:{
type: String,
required: true
},
Email: String
})
- 将文档结构发布为模型
mongoose.modal方法就是将一个架构发布为modal的
- 第一个参数用来表示数据库名称,mongoose自动会把大写名词生成小写负数的集合名称
- 第二个参数 架构Schema
- 第三个参数 自己指定的表名,如果指定则不会自动按照第一条规则生成表名
- 返回模型构造函数
const User = mongoose.model('User', userSchema, 'users')
- 当我们有了模型构造函数就可以对users数据库中的内容进行操作了
-增加数据
首先实例化User Modal创建增加的数据
const admin = new User({
username: 'admin',
password: '123456',
Email: 'admin@admin.com'
})
var users = new User({
username: 'users',
password: '123456',
Email: 'admin@admin.com'
})
//接着需要数据永久化存储
admin.save().then(() => console.log('success'))
users.save().then(()=> console.log('success'))
- 查询数据
- 使用模型构造函数来查询全部数据
User.find((err, ret) => console.log(ret))
//这样查询到的是全部数据
- 条件查询单个
User.findOne({
username: 'users'
},(err, ret) =>{
console.log('findOne + ' + ret)
})
//返回和条件相符的数据
如果第一个参数,也就是条件为空,返回集合中的第一个文档
- 更新数据
User.updataOne(要查找的数据, 要更新的数据, 回调函数)
User.updataOne({name: 'users'}, {name: 'zhang'}, (err, ret) => {
console.log('data saving is success ' + ret)
})
- 删除数据
User.deleteOne({name: 'users'}, (err, ret) => {
console.log(ret)
})