Mongodb数据库的基本使用
Mongodb数据库的基本概念
- 可以有多个数据库
- 一个数据库中可以有多个集合(表)
- 一个集合中可以有多个文档(表记录)
- 文档结构灵活,没有任何限制
- Mongodb非常灵活,不需要像 MySQL 一样先创建数据库、表、设计表结构
- 这里只需要:当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合操作就可以了
- 一切都有Mongodb 来帮你自动完成建库建表这些事儿
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{
qq:{ // 集合
user:[
{name:'张三'}, // 文档
{},
{},
{},
{}
]
products:[
{},
{}
]
},
taobao:{
},
....
}1.启动和关闭数据库
1.1启动
1
2
3# mongodb 默认使用执行 mongod 命令 所处盘符根目录下的 /data/db 作为自己的数据存储目录
# 所以在第一次执行该命令之前先自己手动创建一个 /data/db
mongod
如果想要修改默认的数据存储目录,可以:
1 |
|
1.2 关闭
1 |
|
2.连接和退出数据库
2.1 连接
1 |
|
2.2 退出
1 |
|
2.3基本命令
show dbs
- 查看显示所有数据库
show collections
- 显示当前所有集合
db
- 查看当前操作的数据库
use 数据库名称
- 切换到指定的数据库(如果没有会新建)
- 插入数据
3.在Nodejs中如何操作使用Mongodb数据
3.1 使用官方的 mongodb
包来操作
不推荐使用, 太原生了
-
3.2 使用第三方包
mongoose
来操作 Mongodb 数据库1
npm i mongoose
第三方包 :
mongoose
基于 MongoDB 官方的mongodb
包再一次做了封装-
3.3 简单体验 hello world
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22const mongoose = require('mongoose');
// 连接 MongoDB数据库
// mongodb://localhost:27017/test 以下创建的数据库数据都在 这个 test里
mongoose.connect('mongodb://localhost:27017/test', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// 创建了一个模型 就是在设计数据库
// MongoDB 是动态的,非常灵活。只需要在代码中设计你的数据库就可以了
// mongoose 这个包就可以让你的设计编写过程变得非常简单
const Cat = mongoose.model('Cat', {
name: String
});
// 实例化了一个 Cat
const kitty = new Cat({
name: 'Zildjian'
});
// 持久化保存了 kitty 实例
kitty.save().then(() => console.log('meow'));3.4 创建数据库 并创建架构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36var mongoose = require('mongoose');
// 1.连接数据库
mongoose.connect('mongodb://localhost:27017/test', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// 架构
var Schema = mongoose.Schema;
// 2.设计文档结构/架构(表结构)
// 字段名称就是表结构中的属性名称
// 约束的目的是为了保证数据的完整性, 不要有脏数据
var userSchema = new Schema({
userName: {
type: String,
required: true // 这个意思是 该属性不能为空 必须有
},
password: {
type: String,
required: true
},
email: {
type: String
}
});
// 3.将文档结构发布为 模型 model
// mongoose.model 方法就是用来将一个 架构Schema 发布为一个 model
// 第一参数: 传入一个大写的名词单数 字符串 用来表示你的数据库名称
// mongoose 会自动将大写名字的字符串生成 小写复数 的集合名称
// 例如 这里的 User 会生成一个 users 集合名称
// 返回值: 模型架构函数
const User = mongoose.model('User', userSchema)
// 4. 当我们有了模型构造函数之后 , 就可以用这个构造函数 对 users 集合中的数据进行 增删改查(CURD)新增数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// 新增数据
let admin = new User({
userName: 'admin',
password: '123456',
email: 'admin@qq.com'
})
admin.save((err, ret) => {
if (err) {
console.log('存储失败');
} else {
console.log('存储成功');
console.log(ret); // ret 就是 存储的数据
}
})
// 下面的就是 ret
// {
// _id: 5f32a2c76be62230a099314b,
// userName: 'admin',
// password: '123456',
// email: 'admin@qq.com',
// __v: 0
// }查询数据
查询所有数据 find
1
2
3
4
5
6
7User.find((err, ret) => {
if (err) {
console.log('查询失败');
} else {
console.log(ret);
}
})按条件查询所有符合的数据 find
1
2
3
4
5
6
7
8
9User.find({
userName: '朱元璋'
}, (err, ret) => {
if (err) {
console.log('查询失败');
} else {
console.log(ret);
}
})按条件查询单个的数据 (如果有相同的返回第一个) findOne
1
2
3
4
5
6
7
8
9User.findOne({
userName: '朱元璋'
}, (err, ret) => {
if (err) {
console.log('查询失败');
} else {
console.log(ret);
}
})删除数据
1
2
3
4
5
6
7
8
9
10
11// 3.删除数据
User.remove({
userName: '朱元璋'
}, (err, ret) => {
if (err) {
console.log('删除失败');
} else {
console.log(ret);
}
})更新数据
1
2
3
4
5
6
7
8
9
10
11
12
13// 4.更新数据
// 第一个参数 需要更新的 第二个参数 更新什么
User.update({
userName: '朱元璋'
}, {
password: '123456'
}, (err, ret) => {
if (err) {
console.log('更新失败');
} else {
console.log(ret);
}
})