当前位置: 首页 > article >正文

自学大数据第14天NoSQL~MongoDB及其命令

在这里插入图片描述

这几天主要是看了一下mongodb的一些知识,网上也有一些教程,今天主要是复习一下mongodb

启动mongodb

在连接mongodb前首先要创建数据存放目录与日志存放目录,还得保证当前用户对这两个目录有相应的读写操作

mongod --dbpath=/usr/local/mongodb/data/db/ --logpath=/usr/lcoal/mongodb/data/logs/mongodb.log --logappend --bind_ip=0.0.0.0 --port=27017

这时候是以非守护进程模式运行mongodb,我们退出后mongodb也会退出;

  • –fork:在基于 Unix 的系统中,使用 fork 创建服务器进程,将 MongoDB 服务作为守护进程运行。如果指定了 --fork,则必须同时指定 --logpath。
  • –dbpath:指定存放 MongoDB 数据的目录,启动服务时必须指定。
  • –logpath:默认日志是打印在命令行中的,使用该选项指定日志输出的文件。如果对此目录有写权限且文件不存在,则会自动创建该文件。如果日志文件已经存在,默认会覆盖掉该文件,并删除所有旧的日志。如果希望保留旧的日志,除了使用
    –logpath 之外,还应该使用 --logappend 选项。

使用 --fork命令后启动
在这里插入图片描述

连接mongodb

使用mongosh连接mongodb

在这里插入图片描述
默认连接到的是test库

创建一个数据库

use databasename

当有这个库的时候就会切换到这个库,没有则创建一个库并切换到该库

在这里插入图片描述
当我们刚创建一个空的库时,我们使用查看命令是查看不到该库的,只有库中有数据时才会显示出来;
在这里插入图片描述

创建集合

有了库,我们在库中创建集合:
创建集合两种方式:

  • 1,通过使用创建集合函数的方式
db.createCollection('gavinlim',{capped:true,autoIndexId:true,size:102400,max:10000})

这种方式会指定一些参数:

  • capped~容量是否固定
  • autoIndexId~是否有主键
  • size~分配空间大小
  • max~最大数据数量

查看容量是否固定
在这里插入图片描述

  • 2.直接插入数据的方式
db.gpl.insert({'name':'gavin','age':29})

这种插入数据的方式,如果有集合,则向该集合插入数据,如果没有该集合,则创建该集合并插入数据

查看集合
在这里插入图片描述
查看集合中的数据

db.gpl.find()

在这里插入图片描述

在最新版本中已经移除了save方法
在这里插入图片描述

关于主键是否有必要自己创建而不用mongodb给出的方案的问题:

我们使用insert的方式创建的集合,会默认使用主键

_id: ObjectId("642d6c8a0f471b266387e6f5")

如果不需要使用mongodb通过的主键方式,那么索引就成了一个问题,需要在创建索引,

我们在创建集合时故意不指定autoIndexId,但是在插入数据时还是生成了一个_id,这说明monggodb不建议自定义主键,(如果使用自定义主键,那么可能需要修改配置文件吧)
在这里插入图片描述

MongoDB中的主键是什么?

在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的Object ID 值。

默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段

自定义主键

如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在创建集合时明确定义它。

在显式创建id字段时,需要使用名称中的_id创建它。

如下面的方式:

hadoop> db.code.insert({_id:001,'name':'Bob','age':27})
{ acknowledged: true, insertedIds: { '0': 1 } }
hadoop> db.code.find()
[ { _id: 1, name: 'Bob', age: 27 } ]

在这里插入图片描述
建了这么多集合和数据库,我们试着删除他们:

删除数据库和集合

删除集合

#db.collectionname.drop()

db.gavin.drop()

在这里插入图片描述

删除数据库

db.dropDatabase()

在这里插入图片描述

有一点小发现,我们删除数据库了,这只意味着删除了数据库中的集合,我们在创建数据库(同名)的时候会提示

already on db hadoop

在这里插入图片描述
这里暂且不去管他

到这里,或许我们就大致理解了mongodb的模型了:

我们对比一下关系型数据库Mysql:

  • mongodb中数据库对应Mysql中数据库
  • mongodb中集合对应mysql中一张张表;

monggodb中存储的数据结构比较松散,不像mysql中那样一但定下来就步容易修改了;

如果插入数据相同会出现什么情况?

在没有指定自定义主键的情况下:

在这里插入图片描述
可以看到由于主键不同,素以可以正常插入
我们插入自定义的主键:
在这里插入图片描述
可以发现报错了;

MongoDb中的选择器

选择器主要用于加快数据的操作效率

学习选择器我们以update()函数为例子

  1. $set

插入数据:
在这里插入图片描述

修改数据:

hadoop> db.gpl.update({'name':'Bob'},{$set:{'name':'Jobs'}})
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

在这里插入图片描述
在这里插入图片描述
有多条数据时,只会修改第一条匹配的数(如果未指定修改多条数据的情况下)
在这里插入图片描述

$inc

针对数值做运算的

db.gpl.update({'name':'Bob'},{$inc:{'age':10}})

在这里插入图片描述

其他选择器:


http://www.kler.cn/a/9262.html

相关文章:

  • 由播客转向个人定制的音频频道(1)平台搭建
  • 树-好难-疑难_GPT
  • 项目模块详细说明
  • 【电力系统】永磁同步电机调速系统带有扰动观测器
  • 【Pikachu】越权访问实战
  • ReactPress:构建高效、灵活、可扩展的开源发布平台
  • Web 攻防之业务安全:Response状态值修改测试(修改验证码返回值为 true)
  • 【Kubernetes 企业项目实战】11、掌握 Kubernetes Kustomize 技术从入门到企业实战(下)
  • 蓝桥杯基础12:BASIC-3试题 字母图形
  • 从Hive源码解读大数据开发为什么可以脱离SQL、Java、Scala
  • 2023年PMP报考时间安排攻略!
  • ARM 编译器 Arm Compiler for Embedded 6 相关工具链简介
  • 内核dpc定时器
  • Python 虚拟环境迁移到其他电脑
  • 2023最新8个电脑必装软件,新电脑装完好用又高效
  • 静态工具类中如何注入spring容器
  • AttributeError: module ‘torch‘ has no attribute ‘compile‘
  • HTML5 <head> 标签、HTML5 <i> 标签
  • OBCP第八章 OB运维、监控与异常处理-灾难恢复
  • 数据结构之线性表3
  • 【中级软件设计师】—操作系统考点总结篇(二)
  • 蓝桥杯嵌入式第十二届初赛题目解析
  • Baumer工业相机堡盟相机如何使用BGAPI SDK实现相机资源的正确释放(C++)
  • Redis使用教程之jedis客户端sendCommand方法的byte[]入参,防止混淆string的byte与数值byte的区别
  • 电脑误删除的文件怎么恢复
  • 从零开始学习Blazor