MongDB基础

MongDB数据库的配置与使用

资料:https://www.runoob.com/mongodb/mongodb-tutorial.html

官方文档: https://docs.mongodb.com/manual/

1.基本概念与关系

1.1基本概念

  • 可以有多个数据库
  • 一个数据库中可以有多个集合(表)
  • 一个集合中可以有多个文档(表记录)

1571370312762

  • 文档结构很灵活,没有任何限制
  • 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中,新建环境变量

    1571369426546

  • 配置 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 #注意缩进,参照其他的值来改,若是缩进不对可能导致后面服务不能重启
    

img

  • 重启服务

  • 通过用户名和密码连接登录数据库, 用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库

    进入cmd,输入mongo,进入MongoDB shell.

    直接输入命令会报错,因为没有认证登陆

    img

    • 接下来,进入账户所属数据库,再认证即可
> use admin
switched to db admin
> db.auth("用户名","密码")
1
> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
 
#这样登陆成功了
 
2.3检验是否安装成功
mongod --version

1568639376805

启动和关闭数据库

启动:

# 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

    • 查看显示所有数据库

      1568684532437

  • db

    • 查看当前操作的数据库(默认连接到test),当show dbs之后,没有显示test,是因为test;里面没有数据,一旦往里面插入数据,test就被自动创建出来了

    1568684715468

  • use 数据库名称

    • 切换到指定的数据库(如果没有,会新建)
  • show collections显示当前数据库中的集合(类似关系数据库中的表)

  • db.createCollecttion("集合名")切换到指定的数据库后,创建集合(类似关系数据库中的表)

  • show user查看数据库中所有创建的用户

  • db.students.find()对于当前数据库中的students集合进行数据查找(由于没有条件,会列出所有数据)

  • db.students.drop()在当前说切换的数据库下,删除student集合

1568689141859

  • 创建集合并插入数据

1568685698210

向集合插入数据

1568686180775

在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中的数据进行增删改查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值