MongDB数据库的配置与使用
资料:https://www.runoob.com/mongodb/mongodb-tutorial.html
官方文档: https://docs.mongodb.com/manual/
1.基本概念与关系
1.1基本概念
- 可以有多个数据库
- 一个数据库中可以有多个集合(表)
- 一个集合中可以有多个文档(表记录)
- 文档结构很灵活,没有任何限制
- MongoDB非常灵活,不需要像MySQL一样,先创建数据库、表、设计表结构
- 在里只需要,当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合插入哪条数据
- MongoDB自动完成建库建表
{
qq:{
users:[//集合
//每一条记录都是对象
{name:"张三",age:18},
{name:"李四",age:19},
{name:"王五",age:20},
{name:"赵六",age:21},
{name:"阮七",age:22}
],
products:[
],
...
},
taobao:{
},
baiud:{
}
}
1.2关系型数据库和非关系型数据库
表就是关系
或者说,表和表之间存在关系
- 所有的关系型数据库都需要通过
sql
语言来操作 - 所有的关系型数据库在操作之前,都需要设计表结构
- 而且数据表还支持约束
- 唯一的
- 主键
- 默认值
- 非空
- 非关系型数据库非常灵活
- 有的非关系型数据库就是key-value键值对
- MongoDB是长得最像关系型数据库的非关系型数据库
- 数据库(关系型数据库中)—》数据库(非关系型数据库中)
- 数据表(关系型数据库中)—》集合,简单理解就是数组(非关系型数据库中)
- 表记录(关系型数据库中)—》文档对象(非关系型数据库中)
- MongoDB不需要设计表结构
- 也就是说,可以任意的往里面存数据,没有结构性这么一说
2安装与使用
2.1下载
https://www.mongodb.com/download-center/community
2.2安装
https://jingyan.baidu.com/article/09ea3ede5aff37c0aede3919.html
https://www.jb51.net/article/145489.htm
2.4配置
-
配置环境变量
- 将MongDB目录下的bin目录,配置为用户变量,在用户变量的Path中,将bin目录的路径,复制到Path中,新建环境变量
-
配置 mongod.cfg 配置文件
在MongoDB4.0.0以及以上版本,在使用.msi文件安装的时候,可以勾选安装的同时,注册为windows服务,并且,自动在bin目录下生成mongod.cfg 配置文件,可以直接在配置文件里修改编辑配置
MongoDB4.0.0 远程连接及用户名密码认证登陆配置——windows
参考文章:
https://docs.mongodb.com/manual/tutorial/enable-authentication/
https://docs.mongodb.com/manual/core/security-built-in-roles/
https://blog.csdn.net/Keith003/article/details/80897085
原文链接:https://blog.csdn.net/qq_26896281/article/details/81206492
不设置数据库的用户名和密码,以非授权的形式启动是不安全的,连接进去就可以看到任意数据库。部署到服务器的对话,如果不给数据库设置用户名和密码,只能给他绑定ip,只允许某一台服务器访问。
-
创建数据库管理员账户并赋予权限
打开cmd,输入mongo,进入mongodb的命令页面 #进入admin数据库 > use admin switched to db admin # 创建管理员账户 > db.createUser( { user: "root", pwd: "root", roles: [ { role: "root", db: "admin" } ] } ); user:”用户名“, pwd:"密码”, roles:[{role:"角色名“, db:"角色所属数据库”}, {role:"角色名2“, db:"角色所属数据库2”},.....] 各种角色的具体功能描述见: https://blog.csdn.net/Keith003/article/details/80897085 https://docs.mongodb.com/manual/core/security-built-in-roles/ # 验证用户添加是否成功 如果返回1,则表示成功。 > db.auth("root", "root") # 创建普通用户 db.createUser( { user: "test", pwd: "test", roles: [ { role: "readWrite", db: "user" } ] } ) 用户添加成功会出现:成功的字样和添加的用户信息
-
修改配置文档mongod.cfg(位置:安装目录\bin 下)
首先,将bind_ip改为0.0.0.0 (让其他电脑可以访问,用于远程连接,如果bind_ip是127.0.0.1的话,就只能本地访问)
然后找到 #security:改成下图所示,开启安全认证。
security: authorization: enabled #注意缩进,参照其他的值来改,若是缩进不对可能导致后面服务不能重启
-
重启服务
-
通过用户名和密码连接登录数据库, 用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库
进入cmd,输入mongo,进入MongoDB shell.
直接输入命令会报错,因为没有认证登陆
- 接下来,进入账户所属数据库,再认证即可
> use admin
switched to db admin
> db.auth("用户名","密码")
1
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
#这样登陆成功了
2.3检验是否安装成功
mongod --version
启动和关闭数据库
启动:
# mongodb默认使用执行mongod命令所处盘符根目录下的/data/db作为自己的数据存储目录
# 所以在第一次执行命令之前,手动在磁盘根目录/下,新建一个data文件件/db文件夹
mongod
如果要修改默认的数据存储目录
mongod --dbpath=数据存储目录路径
停止:
在开启服务的控制台,ctrl+c停止
或者直接关闭命令行窗口
配置
2.1连接和退出连接数据库
注意:启动服务,窗口最小化,才能连接
连接:
#该命令默认连接本机服务
mongo
退出连接:
#在连接状态下输入 exit退出连接
exit
2.2基本命令
https://www.cnblogs.com/liyonghui/p/mongodb.html
-
show dbs
-
查看显示所有数据库
-
-
db
- 查看当前操作的数据库(默认连接到test),当show dbs之后,没有显示test,是因为test;里面没有数据,一旦往里面插入数据,test就被自动创建出来了
-
use 数据库名称
- 切换到指定的数据库(如果没有,会新建)
-
show collections
显示当前数据库中的集合(类似关系数据库中的表) -
db.createCollecttion("集合名")
切换到指定的数据库后,创建集合(类似关系数据库中的表) -
show user
查看数据库中所有创建的用户 -
db.students.find()
对于当前数据库中的students集合进行数据查找(由于没有条件,会列出所有数据) -
db.students.drop()
在当前说切换的数据库下,删除student集合
- 创建集合并插入数据
向集合插入数据
在Node中如何操作MongoDB数据库
使用官方的mongodb
包来操作
https://github.com/mongodb/node-mongodb-native
使用第三方mongoose来操作MongoDB数据库
第三方包:mongoose
基于MongoDB官方的mongodb
包再一次做了封装
网址:https://mongoosejs.com/
安装:
npm i mongoose
mongoose使用:
// 引包
const mongoose = require('mongoose');
// 连接MongoDB数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});
// 创建一个模型
// 就是在设计数据库
// MongDB是动态的,非常灵活,只需要在代码中设计数据库就可以了
// mongoose这个包,可以让设计编写过程变得非常简单
const Cat = mongoose.model('Cat', { name: String });
// 实例化一个Cat(最终是cats)
const kitty = new Cat({ name: 'Zildjian' });
// 持久化保存Kitty实例
kitty.save().then(() => console.log('meow'));
mongoose
-
官网:https://mongoosejs.com/
中文:http://www.mongoosejs.net/
-
文档:https://mongoosejs.com/docs/guide.html
中文:http://www.mongoosejs.net/docs/guide.html
-
API文档:https://mongoosejs.com/docs/api.html
起步
安装:
npm i mongoose
官方示例:
// 引包
const mongoose = require('mongoose');
// 连接MongoDB数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});
// 创建一个模型
// 就是在设计数据库
// MongDB是动态的,非常灵活,只需要在代码中设计数据库就可以了
// mongoose这个包,可以让设计编写过程变得非常简单
const Cat = mongoose.model('Cat', { name: String });
// 实例化一个Cat(最终是cats)
const kitty = new Cat({ name: 'Zildjian' });
// 持久化保存Kitty实例
kitty.save().then(() => console.log('meow'));
// 或者
// kitty.save(function (err){
// if(err){
// console.log(err);
// }else{
// console.log('meow')
// }
// })
官方指南
设计Scheme发布Model
// 引包
var mongoose=require('mongoose')
var Schema = mongoose.Schema;
// 连接MongoDB数据库
// 指定连接的数据库不需要存在,当你插入第一条数据库之后,自动被创建出来
mongoose.connect('mongodb://localhost:27017/itcast', {useNewUrlParser: true});
// 设计文档结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
// 约束的目的是为了保证数据完整性
var userSchema = new Schema({
username:{
type:String,
required:true//不能为空
},
password:{
type:String,
required:true//不能为空
},
email:{
type:String,
}
});
//3. 将文档结构发布为模型
// mongoose.model方法激素用来将一个架构发布为model
// 第一个参数:传入一个 大写单数名词字符串用来表示数据库名词
// mongoose会自动将 大写单数名词字符串 转为 小写复数 的集合名称
// User 最终转为 users集合名称
// 第二个参数:接收架构Schema
// 返回值:模型构造函数
var User = mongoose.model('User', userSchema);
// 4.有了模型构造函数之后,就可以使用这个构造函数对users中的数据进行增删改查