mongoDB

mongoDB概念https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html(mysql中的表,在mongodb中叫 集合。我这里统一用表表示,好理解点)
   mongodb中基本的概念是文档、集合(collection)、数据库。之所以和 sql 数据库不一样叫法,应该是底层存储逻辑不一样。

  1. mongoDB的特点:
    • mongoDB的设计目标是极简、灵活、作为web应用栈的一部分。
    • mongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构。简单理解MongoDB这个数据库中存在的是各种各样的JSON。
    • 对存储的数据没有约束性,可以任意存储数据。就像一个JSON对象,可以任意添加字段;且字段的数据类型可以任意修改。
  2. 数据库:数据库
  3. 集合(collection): 集合 类似 sql 中的
  4. 文档(document):文档 类似 sql 中的一条 记录
               注意:在 MongoDB中,数据库和集合都不需要手动创建。当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合。
  5. 域(field):就是 字段

  注意:MongoDB不支持 表连接;MongoDB自动将_id字段设置为主键。

 

mongoDB查询语句:https://blog.csdn.net/qq_41767116/article/details/125586683 或 https://www.runoob.com/mongodb/mongodb-create-database.html 

  • 基础概念:

    • use DATABASE_NAME:创建数据库。如果数据库不存在,则创建数据库,否则切换到指定数据库。
      新建 数据库,不在数据库列表中。要显示它,我们需要向 runoob 数据库插入一些数据
    • show dbs:查看所有数据库。显示数据库列表。
    • show collections:显示当前数据库下所有集合
    • db:当前数据库
    • db.集合:集合对象。如,db.userInfo,就是 userInfo 集合。
      查询语句,一般就是调用集合下的方法:
  • 创建 / 切换数据库:如果数据库不存在,则创建数据库,否则切换到指定数据库。

    use db_name
  • 查看所有数据库

    show dbs
  • 新增:

    db.bank_and_security.insert({'资金帐号':"11111111"})
  • 删除:

    db.bank_and_security.remove({'资金帐号':"11111111"})
  • 更新:

    db.bank_and_security.update({'资金帐号':"11111111"}, {'资金帐号':"9999999"})
  • 查询:mongoDB 的查询,都有等同 sql 功能的 语句的。https://www.cnblogs.com/hanease/p/16208105.html

    • 查询所有记录:db.userInfo.find()
    • 指定返回哪些键:db.userInfo.find({},{id:1})
    • 条件查询(等于):db.userInfo.find({"age": 22}) 【查询 age = 22 的记录】
    • 条件查询(大于):db.userInfo.find({age: {$gt: 22}})【查询 age > 22 的记录】
    • 条件查询(in):db.userInfo.find({"author": {"$in": ["a", "b", "c"]}})
    • 模糊查询(like):db.userInfo.find({"title": /mongodb/})
    • 计数(count):db.article.count()

 

 


mongoose库:

  mongoose是一个对象文档模型库(即,以对象形式操作数据库)。 mongoose就 是 node操作 mongoDB的一个对象
  注意:mongodb 中不需要建立数据库,当你需要连接的数据库不存在时,会自动创建一个出来。

  • mongoose的好处:

    1. 可以为文档创建一个模式结构(Schema)。
      可以理解为是对文档的约束,因为 MongoDB 本身是没有什么约束的,文档数据可以任意插入。
    2. 可以对模型中的对象/文档进行验证。
    3. 数据可以通过类型转换,转换为对象模型。
    4. 可以使用中间件来应用业务逻辑挂钩
  • mongoose中的对象概念:
  1.  schema(模式对象):schema 是模式结构,就是一种约束结构【可以理解为 定义 表 字段。】 参考链接1参考链接2
    schema可以理解为mongoose对表结构的定义(不仅仅可以定义文档的结构和属性,还可以定义文档的实例方法、静态模型方法、复合索引等),每个schema会映射到mongodb中的一个collection,schema不具备操作数据库的能力。
    var studentsSechma=new mongoose.Schema({
        name:String,
        age:Number
    })

    注意:mongoose 中声明字段类型的逻辑

    • mongodb中字段的数据类型就是 在 创建 schema 时确定的。数据到了schema 这里就会根据这里的类型进行一个转化,如果无法正常转化,mongoose就会报错。如:age是一个Number类型,而传进来的是 字母字符串,无法进行转化就会报错。

    • 定义数据类型:可以使用类表示,也可以使用字符串表示(字符串表示 全部小写)。有的数据类型,原生js没有对应的类,可以使用mongoose提供的类。如:

      const testSchema = new mongoose.Schema({
          boolean: {
              type: Boolean,
              default: true
          },
          Decimal128: {
              type: "decimal128",  // 字符串表示类型
              default: 12
          },
          Decimal128: {
              type: mongoose.Schema.Types.Decimal128,  // 直接使用 mongoose 提供的类型 类
              default: 12
          },
      })
    • mongoose 原生支持的类型只有:String、Number、Date、Buffer、Boolean、Mixed、ObjectId、Array、Decimal128。显然不够,所以官方也提供了自定义type的接口。并且github上也有别人写好的插件可以使用。
  2.  Model :model是由schema生成的模型,可以对数据库进行操作。
    Model 类 可以 理解为 所有的文档 集合,即 mogoDB 中 集合的概念。每个Model实例,对应的就是一个文档,是真真实实的数据。
    创建 Model的语法:mongoose.model(modelName, schema);
    var mongoose=require("mongoose");
    mongoose.connect("mongodb://localhost/test");
    var animalSchema=new mongoose.Schema({
        name:String,
        type:String
    });
    var Animal=mongoose.model("Animal",animalSchema);  //  mongoose.model() 的第一个参数就是 集合名,返回这个集合的的 Model类(可以看做是一个集合对象)。 

    注意:1、modelName 就是需要的集合名(即表名),mongoose 会自动讲集合名变成复数(即后面加s)。如果 modelName 大写开头的也会变成小写的
            2、modelName 集合,数据库没有就会自动创建,如果有就返回对应的集合对象,即 Model 类。
    下面,使用直接使用 Model 类 向数据库插入文档:

    Animal.create({ name: 'small' }, function (err, small) {
      if (err) return handleError(err);
      // saved!
    });

     我们一般不直接用 Model 类 向数据库插入文档。而是用 Model实体对象 Entity 来插入数据库数据
    【个人感悟】Mode 类 就是 一个 集合对象;而 Mode 实例 就是 这个集合下的文档。

  3.  document(文档对象):document对象就是Model的一个实例,使用save方法保存数据,Model和document都能影响数据库的操作,但document更具操作性。
    注意:Model是一个类实例化对象就 是 文档对象。一个 文档对象 就是sql中一条记录
    const sechma = new mongoose.Schema({
        name:String,
        age:Number
    })
    const model = mongoose.model('User', sechma) // 基于 sechma 对象,创建 model对象
    
    const doc= new model(req.body.user)  // 实例化一个 Model对象,就创建了 document对象。
    
    doc.save()

     


 MongoDB安装:

  • 安装版:这个比较简单,就是普通软件 双击安装就可以了。
    MongoDB和Robomongo的安装配置与简单实战 :https://blog.csdn.net/u011684839/article/details/80911732 或 https://www.jianshu.com/p/1c85bf051754 或 https://www.jb51.net/article/149859.htm(推荐这个,这个新版软件的安装方式)
      注:MongoDB 新版的已经不支持32位的系统了。所以要安装 win32位 的MongoDB,请参考:

  • 免安装(推荐):如果不想 使用安装包安装,主要是怕安装时 会把 数据库 配置到window系统服务中。官网下载 zip 压缩包,解压后需要自己做些配置。
    安装教程:https://blog.csdn.net/qq_28316065/article/details/102594991推荐,亲测有效)或  https://www.cnblogs.com/chenyucong/p/6217017.html(亲测有效,免安装的)
    1、zip解压后可重命名,解压后文件目录如下

    2、在bin同级目录创建一个空文件夹data,作为数据存放路径
    3、在bin同级目录创建一个文件夹logs,并在文件夹中创建一个mongo.log文件,存放日志信息
    4、在bin同级目录创建一个mongo.conf配置文件,内容如下:【写在 mongo.conf 中,就不需要把配置写在命令上了】

    #数据库存放路径  
    dbpath=D:\software\mongodb-6.0.1\data
     
    #日志输出文件路径, 路径后面必须是一个文件,不能是一个目录 
    logpath=D:\software\mongodb-6.0.1\logs\mongo.log 

    5、在bin目录下 cmd中。输入命令

     mongod --dbpath D:\software\mongodb-6.0.1\data

    上面的命令可以做出 bat 批处理文件。如下 startup-dbpath.bat文件。
    在bin同级目录创建批处理文件startup-conf.bat、startup-dbpath.bat,内容如下

    # startup-conf.bat 文件
    cd bin
    mongod --config "D:\software\mongodb-6.0.1\mongo.config"
    # startup-dbpath.bat 文件
    cd bin
    mongod --dbpath D:\software\mongodb-6.0.1\data

    6、启动顺序:双击startup-dbpath.bat(注意此窗口不要关闭),然后使用navicat连接数据库就可以了。

 


 

MongoDB的内置角色  https://juejin.cn/post/7165701469159555102

      内置角色足够我们使用,不需要另外创建角色

  • 数据库读写角色:【程序中只有读写数据库的能力,不可能是给与管理的权限。所以nodejs、java中一般只用这两种权限】
    • read:允许用户读取指定数据库  
    • readWrite:允许用户读写指定数据库
  • 数据库管理员角色:
    • dbAdmin:允许用户进行索引创建、删除,查看统计或访问 system.profile,但没有角色和用户管理的权限
    • dbOwner:提供对数据库执行任何操作的能力。这个角色组合了 readWrite、dbAdmin 和 userAdmin 角色授权的特权
    • userAdmin:提供了在当前数据库中创建和修改角色和用户的能力
  • 所有数据库角色:【只在 admin 数据库中可用】
    • readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
    • readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
    • userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
    • dbAdminAnyDataBase:只在 admin 数据库中可用,赋予用户所有数据库的 adAdmin 权限

MongoDB设置用户名密码   https://blog.51cto.com/u_12420306/4958284 或 https://www.itcoder.cn/4/39/

【重点先说:mongodb 设置账号密码和mysql不一样,它是可以给每一个数据库都设置一个账号密码的,但是在设置之前,要先给 system 下的 admin 数据库先设置账号密码才可以给其他的数据库设置!这一点很重要,否则会失败!!】

  • 切换到admin数据库,给admin 创建 用户密码。【这就是一个超级管理员权限
    说明:必须给admin数据库设置用户密码,因为只有admin数据库的账户才能创建用户。其它数据库账都的都不行。
    db.createUser({user: 'root', pwd: '1234', roles: ['root']})
  • 接下来就可以给特定数据库设置账号密码了,假如现在有一个数据库,名为:imaiduo,先切换到该数据库下,然后给这个指定数据库创建用户密码
    db.createUser({user:"root",pwd:"1234",roles:[{role:"readWrite",db:"imaiduo"}]})
  • 以上设置好后,MongoDB 默认是没有开启访问控制权限的,要通过 --auth 参数重启 mongodb 服务,这个时候注意!!要把 win 本地的 mongodb 服务先停用掉!然后来到 bin 目录下:
    D:\mongodb\bin>mongod --dbpath D:\mongodb\data --auth   # 也可以把这些参数 配置再 文件中。启动时指定 配置文件就可以
  • 修改用户密码:https://blog.csdn.net/qq920447939/article/details/82665883 
    利用db.changeUserPassword
    db.changeUserPassword('tank2','123456');  
  • 删除用户:
    # 如果需要删除所有的用户,可以直接这样做:
    db.system.users.remove({}) 
    
    # 如果需要删除个某个指定的用户,可以这样做
    db.system.users.remove({user:"username"})

 mongoose其它注意点:

1、mongoose常用api文档 : https://www.jianshu.com/p/fc11fd1c26f9  或 https://www.cnblogs.com/wx1993/p/5243245.html (两篇文章 结合起来看)

     注:Mongoose在创建Model时对Collection的命名策略,和设置的不一定一致。https://www.cnblogs.com/wx1993/p/5243245.html。      解决办法:https://my.oschina.net/baiping/blog/1488806(亲测有效,第三个参数就是实际的集合名)

   

 


 mongoDB 可视化工具:

1、NoSQLBooster:推荐使用这个

  优点:日期时间,可以自己选择哪种格式显示;数字也可以数字千分位显示;JSON数据,可以选择格式化显示。

2、navicat:其次推荐这个

  缺点:连接慢;日期时间,只显示 ISO 格式的时间而非本地时间。

3、MongoDB Compass:官方工具,可操作的功能比较少。基本就是看数据,其它操作不方便。

4、Robo 3T  :https://www.cnblogs.com/tugenhua0707/p/9250673.html (推荐用这个)

5、Studio 3T :该公司收购了 Robo 3T。Studio 3T 软件太大了,几百兆。

6、mongdbVue:

7、mongodbmanagerfree:免费版的 不支持 mongodb 6.0以上版本的,学习视频中老师推荐的。https://www.cnblogs.com/ckfuture/p/14342000.html

 

 

posted @ 2019-06-20 10:23  吴飞ff  阅读(184)  评论(0编辑  收藏  举报