MongoDB笔记1——MongoDB简介

news2024/11/13 9:03:28

MongoDB

什么是MongoDB

2007年10月,MongoDB由10gen团队所开发,2009年2月首度推出。

基于分布式文件存储的数据库由C++语言编写。旨在为WEB应用提供可拓展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

优点

  1. MongoDB提供了一个面向文档存储,操作起来比较简单和容易
  2. 如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所谓的分片
  3. MongoDB支持各种编程语言:RUBY、PYTHON、JAVA、C++、PHP、C#等多种语言
  4. 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更新的扩展性

为什么学习MongoDB

MongoDB特点

  • 无需要跨文档或跨表的事务及复杂的join查询支持
  • 敏捷迭代的业务,需求变动频繁,数据模型无法确定
  • 存储的数据格式灵活,不固定,或属于半结构化数据库
  • 业务并发访问量大
  • TB级以上的海量数据存储,且数据不断增加
  • 要求存储的数据持久化、不丢失
  • 需要99.999%的数据高可用性
  • 需要大量的地理位置查询、文本查询

MongoDB解决MySQL的"三高"问题

  1. 对数据库高并发写入需求
  2. 对海量数据高效率存储访问需求
  3. 对数据库高扩展和高可用的需求

MongoDB实际应用

  1. 社交场景,比如朋友圈,附近的人的地点的存储
  2. 游戏场景,比如玩家当前装备、得分等
  3. 物流场景,比如快递的位置,状态,途径
  4. 视频场景,比如直播中的点赞数和互动留言等

MongoDB的缺点

  1. MongoDB不支持事务
  2. MongoDB不能进行多表联查

MongoDB和Mysql对比

 MongoDB名词概念

SQL术语/概念MongoDB术语/概念解释说明
databasedatabase数据库
tablecollection数据量表/集合
rowdocument
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

MongoDB与MySql存储方式比较

链接MongoDB

使用用户名和密码链接登录到默认数据库

使用默认的服务器和账号登录

# mongo

设置管理员

>use admin

>db.createUser({user:"admin",pwd:"password",role:[{role:"root",db:"admin"}]});

使用自定义的账号密码登录其他服务器

# mongo --port 27017 -u admin -p password --authenticationDatabase admin

MongoDB数据库显示

查看所有数据库:

show dbs

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数 据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

MongoDB数据库创建/删除

创建数据库:

use dbname

如果数据库不存在,则创建数据库,否则切换到指定数据库。

在 MongoDB 中,集合只有在内容插入后才会创建! 也就是说,创建集合(数据表)后要再插入一个文档 (记录),集合才会真正创建。

通过 db 来查看当前使用的数据库

删除数据库:

db.dropDatabase()

MongoDB操作集合

创建集合:

db.createCollection("集合名")

查看集合:

show collections/show tables

删除集合:

db.集合名.drop()

MongoDB数据类型

shell默认使用64位浮点型数值。("x":3.14)或("x":3}。

对于整型值,可以使用NumberInt(4 字节符号整数) 或NumberLong(8字节符号整数), {“x”:NumberInt("3"") }{“x”:NumberLo ng("3"")}

MongoDB在集合中插入数据

插入的数据被称为文档。

文档的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

db.集合名.insert(document)
 

db.col.insert({title: '一些数据',

        description: 'MongoDB 是一个 Nosql 数据库',

        tags: ['mongodb', 'database', 'NoSQL']

})

MongoDB在集合中更新数据

更新数据

语法:

db.集合名.update({查询条件},{$set:{更新内容}},

    {

        upsert:<boolean>,

        multi:<boolean>,

    }

)

upsert: 默认为false ,如果查询不到数据,则把跟新输入插入

multi:默认为false,默认只改一条,true,更改多条

db.col.update({'name':'张三'},{$set:{'name':'张三丰'}})
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}},{multi:true})
db.col.update({'name':'张三'},{$set:{'name':'张三丰'}},{upsert:true,multi:true})

如果我们想实现在某一列上在原有的值基础之上进行递增1效果可以用$inc运算符来实现

语法:

db.集合名.update({查询条件},{$inc:{字段名:NumberInt(1)}})

例如

db.col.update({‘_id':’1'},{$inc:{likenum:NumberInt(1)}})

MongoDB在集合中删除文档

删除文档: db.集合名称.remove(<query>, { justOne: <boolean>} )

删除所有数据:

db.col.remove({})

删除一条数据:

db.col.remove({“name”:”张三”},{justOne:true})

删除多条数据:

db.col.remove(“name”:”张三”})

MongoDB在集合中查询文档

MongoDB 查询文档使用 find() 方法。

find() 方法以非结构化的方式来显示所有文档。

db.collection.find(query)

pretty() 方法以格式化的方式来显示所有文档,linux下有用。

>db.col.find().pretty()

MongoDB查询条件

MongoDB的 And条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开, 即常规 SQL 的 AND 条件。

db.col.find({key1:value1, key2:value2})

以上实例中类似于 WHERE 语句:WHERE key1=‘value1’ AND key2=‘value2'

MongoDB的 Or条件

MongoDB OR 条件语句使用了关键字 $or

db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } )

MongoDB的 And 与 Or 一起使用

AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where key1>value1 AND (key2 = value2 OR key3 = value3)’

db.col.find({“key1": {$gt:value1}, $or: [{“key2": “value2"},{“key3": “value3"}]})

MongoDB范围条件

col"集合中 “key" 大于100,小于 200 的数据 > db.col.find({“key” : {$lt :200, $gt : 100}}) 相当于RDBMS: Select * from col where key>100 AND key<200;

MongoDB的模糊查询

查询 name 包含“小"字的文档:

db.col.find({“name”:/小/})

查询 name 字段以“小"字开头的文档:

db.col.find({“name”:/^小/})

查询 name字段以“小"字结尾的文档:

db.col.find({“name”:/小$/})

MongoDB的Limit 和 Skip操作

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

> db.col.find().limit(NUMBER)

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

> db.col.find().limit(NUMBER).skip(NUMBER)

MongoDB的统计

在 MongoDB 中使用count() 来统计个数

>db.col.count([{key:value}])

MongoDB的排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指 定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 - 1 是用于降序排列。

>db.col.find().sort({KEY:1})

MongoDB操作小结

MongoDB的索引

查看索引

db.collection.getIndexes()

创建索引(单个索引,复合索引)

db.collection.createIndex(keys,option)

例如 :db.col.createIndex({username:1[, key:1]})

删除索引

db.collection.dropIndex(index)

例如:db.col.dropIndex({username:1})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

东芝新小黑移动硬盘数据被格式化如何恢复(2024年8月版)

在数字化时代&#xff0c;数据已成为我们生活和工作中不可或缺的一部分。东芝新小黑移动硬盘&#xff0c;以其便携性和大容量&#xff0c;成为许多用户存储重要数据的首选。然而&#xff0c;当这些宝贵的数据因意外格式化而面临丢失的风险时&#xff0c;我们该如何应对&#xf…

Visionpro二次开发学习笔记7-使用CogToolDisplay控件

CogToolDisplay控件可显示与视觉工具记录相关的图像&#xff0c;图形和其他状态信息。它使用CogRecord和ICogTool接口将图像和图形连接到CogDisplay。 图片清单 控件的CogComboBox列出当前记录及其子记录中的图像和图形。您可以单击列表并选择要显示的图像或图形。如果记录层…

基于springboot3实现单点登录(二):认证服务端搭建

前言 上文我们介绍了oauth2.0的相关理论和流程&#xff0c;本文我们继续实现。 Oauth2协议中有个很重要的概念&#xff0c;叫做”端点“&#xff0c; 以下整理了一些常用的端点及其参考访问路径及使用场景的信息&#xff0c;供参考。 这些端点在oauth2.0协议的整个生命周期…

白嫖不是梦,三分钟搞定一台服务器

在知乎上浏览时&#xff0c;我偶然发现了一个引人入胜的话题。这个话题附带了一张Excel表格的截图&#xff0c;表格设计得非常巧妙。它允许用户输入包括日薪、工作时间、通勤时间、休息时间以及学历等在内的多个变量。通过这些输入&#xff0c;表格能够计算出一个反映工作性价比…

JAVA—正则表达式

关于正则表达式的了解学习&#xff0c;以及用于校验格式&#xff0c;信息查找和替换分割内容。 目录 1.概述 2.书写规则 3.应用案例 4.用于信息查找 5.用于搜索替换&#xff0c;分割内容 1.概述 由一些特定的字符组成&#xff0c;代表一个规则 作用&#xff1a; 1.校验数据…

国外高清风景视频素材无水印哪里找?

哪里可以下载国外高清风景视频素材&#xff1f;有哪些高清海外素材网站&#xff1f;作为一名从业多年的视频剪辑师&#xff0c;今天就来给大家揭秘可以下载国外高清风景视频素材的网站&#xff0c;赶紧进来看看吧&#xff5e; 1. 稻虎网 稻虎网作为国内外知名视频素材网站&a…

【机器学习】 Sigmoid函数:机器学习中的关键激活函数

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Sigmoid函数&#xff1a;机器学习中的关键激活函数1. 引言2. Sigmoid函数定义3.…

C++day04

1】思维导图 2】完成关系运算符重载&#xff0c;实现成员函数和全局函数的版本。 #include <iostream>using namespace std;class Stu { friend bool operator<(const Stu &L,const Stu &R); private:int age;int id; public:Stu(){}Stu(int age,int id):age…

OD工具-18个实操工具共创会

一、什么是共创会1.1 什么是共创共创&#xff0c;共同创造词组的缩写&#xff0c;字面上来看就是团队为了多个个体一起把以前没有的事物给产生出或者造出来&#xff0c;这明显的是一种典型的人类自主行为。 托德老师有一段描述:共创是一种工作状态&#xff0c;让团队中的每个个…

【时时三省】(C语言基础)操作符3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 &取地址操作符 示例: 每个内存单元都有自己的编号 编号就成为内存单元的地址&a就是找出a的地址 后面可以加一个int *pa&#xff1d;&a 是可以用来存放地址 pa是用来存放地址的…

SQL进阶技巧:有序数据合并问题之如何按照指定的规则对数据进行合并?【详解collect_list函数有序性保证】

目录 0 问题描述【小红书面试题】 1 数据准备 2 问题分析 3 小结 0 问题描述【小红书】 有如下需求,需要将左边的表变换成右边的表,注意字段内容的顺序及对应内容的一致性。 第一个字段为name,第二个字段为subject,第三个字段为score,变换后要求subject按照语文、数学…

电脑管家软件搬运导致edge、chrome浏览器不可用

最新版本的腾讯电脑管家可以直接搬运软件到其他路径&#xff0c;但是搬运浏览器会造成软件问题&#xff0c;不建议搬运。 浏览器恢复到原路径&#xff0c;可以解决浏览器不可用的问题&#xff1a; 首先到达你的搬运路径下 可以看到软件文件夹&#xff0c;比如Microsoft Edge或…

C++11——包装器和绑定

1.包装器 C中有一些可调用对象&#xff0c;比如 函数指针&#xff0c;仿函数对象 lambda等等&#xff0c;但是他们又有缺点 因此就引出了包装器的概念 包装器 function的头文件是<functional> 我们可以用包装器包装函数指针&#xff0c;仿函数&#xff0c;lambda int …

关于LLC知识5

RLC的增益曲线不知一条 频率升高&#xff0c;增益会越来越低 无论在容性区还是感性区&#xff0c;当负载加重的时候&#xff0c;R阻值会变小&#xff0c;所以R的分压也会变小&#xff0c;导致增益会变低 当负载突然加重&#xff0c;输出电压会变低&#xff0c;增益曲线由红色变…

MySQL数据分析进阶(十二)设计数据库——PART3

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…

c++ - c++11(1)

文章目录 前言一、统一的列表初始化1、使用{ }初始化2、 std::initializer_list 二、声明1、auto2、decltype3、nullptr 三、范围for循环四、右值引用1、左值引用和右值引用2、左值引用和右值引用的比较3、左值引用的使用场景4、右值引用的使用场景5、完美转发 前言 一、统一的…

在百度飞浆中搭建pytorch环境

文章目录 1 先检查创建的环境2 创建虚拟环境3 最终结果 1 先检查创建的环境 选择GPU版本 检查python版本 2 创建虚拟环境 虚拟环境的创建 python3 -m venv env_name # (python3 -m 路径 环境名)激活虚拟环境 source env_name/bin/activate这里注意&#xff0c;同名文件…

MySQL的InnoDB的页里面存了些什么

文章目录 创建新表页的信息新增一条数据根据页号找数据信息脚本代码py_innodb_page_info根据地址计算页号根据页号计算起始地址 主要介绍数据页里面有哪些内容&#xff0c;一行数据在文件里面是怎么组织的 创建新表页的信息 CREATE TABLE test8 (id bigint(20) NOT NULL AUTO…

Android开发-使用FFmpeg-Android进行音视频处理

使用 FFmpeg-Android 进行音视频处理 1. 前言2. FFmpeg-Android 简介3. 功能介绍及实现3.1. 视频字幕添加Kotlin 代码示例&#xff1a;3.2. 尺寸剪切Kotlin 代码示例&#xff1a;3.3. 添加或去除水印Kotlin 代码示例&#xff1a;3.4. 时长截取Kotlin 代码示例&#xff1a;3.5. …

【十万个为什么】强磁场环境用什么编码器好?磁编为什么不怕强磁场?磁编与光编哪一个抗干扰强?

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、案例场景1&#xff1a;场景2&#xff1a; 二、为什么磁编可以在磁场中工作三、磁编为什么不怕强磁场&#xf…