首页 > 数据库 >51.MongoDB的使用

51.MongoDB的使用

时间:2024-12-13 16:57:00浏览次数:3  
标签:51 name students MongoDB 数据库 db 使用 age

 

 

(五十一)MongoDB的使用

1:MongoDB

 

概念

 

 

 

        MongoDB的库中由一个或多个collections组成,这里的collection相当与关系型数据库中的表
        MongoDB中的记录是一个document文档,它是由字段和值对组成的数据结构。 MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。
        MongoDB支持的数据类型有:Double, String, Object, Array, Binary data, Undefined, Boolean, Date, Null 等

 

命令介绍

 

 

    db.help()                    查看库级别的命令
    db.mycoll.help()             查看collection级别的命令
    sh.help()                    查看发片的命令
    rs.help()                    查看副本集的命令
    help admin                   查看管理相关的命令
    help connect                 查看连接到数据库的命令
    help keys                    keys的相关命令
    help misc                    misc things to know
    help mr                      查看mapreduce相关的命令
    show dbs                     查看当前的数据库
    show collections             查看数据库中所有的collections
    show users                   当前的数据库中有哪些用户
    show profile                 显示profile信息,显示性能评估工具
    show logs                    显示日志名信息
    show log [name]              显示指定查看对应日志的信息
    use <db_name>                进入某库,设定某库为当前库
    db.foo.find()                列出当前collection中所有的document
    db.foo.find( { a : 1 } )     列出当前collection中a = 1的document
    it                           result of the last line evaluated; use to further iterate
    DBQuery.shellBatchSize = x   设置显示的item的行数
    exit                         退出Mongo shell

 

 

 

CRUD操作

 

    db.students.insert({name:"robby",age:20})  插入一条数据,默认会创建students表
    show collections                         显示当前的表
    db.students.stats()                      显示students表的数据信息
    db.students.find()                       查询插入的各个字段
    db.students.count()                      查看students表中有多少个document

 

Collection的简单查询过滤操作

 

db.students.remove({"name": "robby"})
# 删除表
db.students.drop()
# 删除当前数据库
db.dropDatabase()
find()的高级用法:比较操作:
(一)db.students.find({age: {$gt: 10}})  age大于30
(二)db.students.find({age: {$gte: 30}})  age大于等于30
(三)db.students.find({age: {$lt: 30}})  age小于30
(四)db.students.find({age: {$lte: 30}})  age小于等于30
(五)db.students.find({age: {$in: [20, 30]}})  age在[20, 30]的document
(六)db.students.find({age: {$nin: [20, 30]}})  age不在[20, 30]的document
find()的高级用法:组合条件:逻辑运算
(一)db.students.find({$or: [{name: {$eq: "robby"}}, {age: {$nin: [40,50]}}]}) 或运算
(二)$and:与运算
(三)$not:非运算
(四)$nor:取反运算
find()的高级用法:元素查询: 根据document中是否存在指定的字段进行的查询
(一)db.students.find({gender: {$exists: true}})  查询存在gender字段的document
(二)$mod:取摸
(三)$type:返回指定字段的值类型为指定类型的document
update()的高级用法:$set 更新,或插入字段的值, $unset 删除指定字段 ,$rename 修改字段名 
(一)db.students.update({name: "robby"}, {$set: {age: 44}})
     将name为robby的这个document的age字段的值改为44
     db.students.update({name: "robby"}, {$set: {age: 50}})
     将name为robby的这个document的age字段的值改为50
(二)db.students.update({name: "robby"}, {$unset: {age: 50}})
     删除name字段为robby的document的age为50的字段
(三)db.students.update({name: "robby"}, {$rename: {age: "Age"}})
     修改name字段为robby的document的age字段名为Age字段名
(四)db.students.update({name: "robby"}, {$inc: {course: "Python"}})
     给name字段为robby的document增加一个字段course且值为Python

 

 

MongoDB权限管理

 

    1:创建一个root用户,角色为root,因此root用户对数据库具有管理权限,但是不具备操作权限
    db.createUser({user:"root",pwd:"123456", roles: [{ role: "root", db: "admin" }]}); # 创建用户
    db.system.users.remove({user:"root"});  # 删除用户
    2:createUser()方法说明
    user:定义用户名 
    pwd:设置密码 
    roles:指定用户的角色,可以用一个空数组给新用户设定空角色; 在roles字段,可以指定内置角色和用户定义的角色。
    db:指定用户对哪个数据库具有管理员权限
    3:角色种类说明
    Built-In Roles(内置角色): 
    ①. 数据库用户角色:read、readWrite; 
    ②. 数据库管理角色:dbAdmin、dbOwner、userAdmin; 
    ③. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
    ④. 备份恢复角色:backup、restore; 
    ⑤. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 
    ⑥. 超级用户角色:root 
    ⑦. 内部角色:__system
    4:角色对应的意义说明
    Read:允许用户读取指定数据库 
    readWrite:允许用户读写指定数据库 
    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile 
    userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 
    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 
    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 
    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 
    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 
    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 
    root:只在admin数据库中可用。超级账号,超级权限
    5:查看授权表
    use admin
    db.system.users.find();
    6:此时退出MongoDB,且编辑配置文件/etc/mongod.conf, 添加如下授权配置,在重启mongodb
    security:
      authorization: enabled
    7:可以在连接数据库的时候认证,也可以在登入时候认证,这里使用登入之后认证的方式
    show dbs; (会报错,因为没有管理授权)
    db.auth("root", "123456")   授权之后再查看数据库就没有问题了
    8:此时登入使用的是root用户,角色是管理角色,但是不具备对数据库的操作权限
    use test;
    show collections;  (会报错,因为没有操作权限)
    9:再次创建一个用户: test,让其对test具有读写操作, 且切换用户为test
    db.createUser({user:"test",pwd:"test", roles: [{ role: "readWrite", db: "test" }]});
    db.auth("test", "test")
    10:再次查看test库的表,发现可以查看了
    show collections;
    11:其实,如果需要创建一个用户具有管理权限且同时具有操作权限,那么这个用户的角色必须是root
    db.createUser({user:"root",pwd:"123456", roles: [{ role: "root", db: "admin" }]});

 

Mongodb Index 介绍

 

 

MongoDB中的索引与MySQL中的索引有类似的功能,将表中的字段添加索引,索引会将字段做排序,依次索引能够大大提高MongoDB的查询能力

 

 

    db.students.createIndex({name: 1})
    给name字段创建索引, 1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
    实例
    db.students.getIndexes()
    查看索引
    db.students.find({"name": "robby"}).explain()  # winningPlan的stage为fetch,非COLLSCAN(字段扫描)
    查看是否使用到了索引(由于MongoDB调优)
    db.student.dropIndex("name_1")
    删除索引
    db.students.createIndex({name: 1}, {unique: true})
    给name字段创建一个唯一键索引,那么再给students表增加一条行document,且name与之前存在的document的name值相同,那么就会报错, 如:增加一条document
    db.students.insert({name: "robby"})
    报错的信息如下:
    WriteResult({
            "nInserted" : 0,
            "writeError" : {
                    "code" : 11000,
                    "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.students.$name_1  dup key: { : \"robby\" }"
            }
    })

 

 

 

1.MongoDB的概念

  • MongoDB是专为可扩展性,高性能和高可用性而设计的数据库;

  • MongoDB的库中由一个或多个collections组成,这里的collection相当于关系型数据库中的表;

  • MongoDB中的记录是一个document文档,它是由字段和值对组成的数据结构;

  • MongoDB文档类似于JSON对象,字段的值可以包括其他文档,数组和文档数组;

  • MongoDB支持的数据类型有:Int、Double, String, Object, Array, Binary data, Undefined, Boolean, Date, Null 等;

2.CRUD操作

  • db.students.insert():插入一条数据,默认会创建students表;

  • show collections:显示当前的表;

  • db.students.stats():显示students表的数据信息;

  • db.students.find():查询插入的各个字段;

  • db.students.count():查看students表中有多少个document;

3.find()的高级用法

比较操作:

  • $gt:大于;

  • $gte:大于等于;

  • $lt:小于;

  • $lte:小于等于;

  • $in:在范围内;

  • $nin:不在范围内;

逻辑运算:

  • $or:或运算;

  • $and:与运算;

  • $not:非运算;

  • $nor:取反运算;

元素查询:

  • $exists:查询存在某字段的document;

  • $mod:取摸;

  • $type:返回指定字段的值类型为指定类型的document;

4.update()的高级用法

  • $set:更新,或插入字段的值;

  • $unset:删除指定字段;

  • $rename:修改字段名;

5.createUser()方法说明

  • createUser()方法为数据库创建新用户,如果用户已存在于数据库中,则db.createUser()返回重复的用户错误;

  • 方法中的user为指定用户名、pwd为设置密码、roles为指定用户的角色,可以用一个空数组给新用户设定空角色、db为指定用户对哪个数据库具有管理员权限;

6.角色种类说明

  • 数据库用户角色:read、readWrite;

  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;

  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

  • 备份恢复角色:backup、restore;

  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase;

  • 超级用户角色:root

  • 内部角色:__system

7.Mongodb Index 介绍

  • 索引支持MongoDB中查询的高效执行;

  • 索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分,索引存储特定字段或字段集的值,按字段值排序;

  • 索引条目的排序支持有效的等式匹配和基于范围的查询操作;

  • MongoDB可以使用索引中的顺序返回排序结果;

 

标签:51,name,students,MongoDB,数据库,db,使用,age
From: https://www.cnblogs.com/zhongguiyao/p/14875269.html

相关文章

  • 52.Python操作MongoDB文档数据库
     (五十二)Python操作MongoDB文档数据库1:Pymongo详解  安装 pipinstallpymongo 查看数据库  frompymongoimportMongoClientconnect=MongoClient(host='localhost',port=27017,username="root",password="123456")connect......
  • 53.Redis的使用
      (五十三)Redis的使用 1:Redis入门 概念 1:Redis运行过程,也就是读写过程都是基于内存实现的key/value存储。对比与memcached而言,会基于异步方式(快照)同步到文件系统,实现数据的持久性存储。单一进程响应用户的所有的请求,具有主从架构。2:单台服务器可以响应的1......
  • 鸿蒙Next Track 使用方法总结
    一、概述@Track是class对象的属性装饰器。当class对象是状态变量时,@Track装饰的属性发生变化,只会触发该属性关联的UI更新;未被标记的属性不能在UI中使用。从APIversion11开始,该装饰器支持在ArkTS卡片中使用。二、装饰器说明装饰器参数:无。可装饰的变量:class对象的非静态成员......
  • SpringBoot - 自定义启动Banner(附:使用艺术字体)
    我们知道 SpringBoot 项目启动时会在控制台打印出一个 banner,下面演示如何定制这个 banner。1,修改banner文字 (1)首先在 resources 目录下创建一个 banner.txt 文件。2,使用艺术字体(1)如果想要将文本设置为类似默认 banner 那样的艺术字体,可以借助下面几个在线......
  • 【技能储备】J-link RTT的使用
    此篇文章在2024年10月30日被记录技能储备系列是一些暂时由于时间或者其他客观因素暂时无法进行的工作,但是觉得很有用,因此做个记录,文章参考自Snow_2018在CSDN上的文章,原文链接为点击我写在前面本文介绍了J-LinkRTT的部分使用内容,很多地方参考和使用了J-Link的官方资料,有的......
  • 使用 nvm 为多项目设置不同 Node.js 环境,被同事们集体点赞了 !
    背景昨天开会时,突然一位前端开发同事埋冤到:”我太痛苦了,我有好几个项目要开发,关键是使用的Node.js版本不一致,每次运行不同的项目还得使用nvm重新切换一下Node.js版本,我快要崩溃了!“听到这里,我忍不住要为你赋能一下,能显著提升你的开发效率,解决你的心里崩溃,让你快乐开发......
  • 数据湖仓升级 | 破解湖仓“先加载后使用”悖论,用数据虚拟化,走出数据沼泽
    近年来,大数据领域呈现出令人目不暇接的发展态势。从Hadoop生态系统的多样化,到云厂商将大数据与SaaS模型相结合,这一领域的技术和工具正在以惊人的速度演化。在此背景下,“数据湖”作为一种整合大规模数据的存储与计算解决方案,吸引了众多企业的关注。然而,传统数据湖也面临治理、复......
  • 2024 PyCharm安装使用教程(附激活,常见问题处理)
    第一步:下载PyCharm安装包访问PyCharm官网,下载PyCharm也可以在这里点击下载PyCharm下载PyCharm第二步:安装PyCharm下载完成后,进行安装,next,安装完成点击xx关掉程序!第三步:下载补丁PyCharm补丁文件点击获取补丁下载成功后,打开标注的文件文件夹,进入到文件夹......
  • 【捡垃圾】使用4.2寸三色墨水屏做一个任务待办清单
    此篇文章在2024年1月9日被记录熟悉了解本章博客需要你有较为入门的编程基础,包括但是不限于C语言、python1、前言最近在老五这里看到4.2寸的三色墨水屏只要7.5一张,于是下单了两个,到货后发现是全新设备,保护膜都在,拆开后发现是telink8359处理器,3个纽扣电池,这个价格还要什么自......
  • 51单片机中断
    51单片机中断系统详解目录51单片机中断系统详解目录中断的基本概念什么是中断中断的作用与优势51单片机的中断源中断优先级51单片机的中断优先级机制中断源的配置设置和修改中断优先级的方法示例代码高优先级中断抢占低优先级中断中断使能与禁止示例代码......