MongoDB 基础知识

news2024/9/9 1:32:29

一、为什么学习MongoDB

MongoDB解决Mysql 的“三高”问题:

1.对数据库高并发写入需求

2.对海量数据高效率存储访问需求

3.对数据库高扩展和高可用的需求

MongoDB 实际应用:

1.社交场景,比如朋友圈,附近的人的地点的存储

2.游戏场景,比如用户当前装备,得分等

3.物流场景,比如快递的位置,状态,途径

4.视频场景,比如直播中的点赞数和互动留言等

二、MongoDB的缺点

1. MongoDB 不支持事务

2. MongoDB 不能进行多表联查 

三、MongoDB名词概念 

三、MongoDB数据库显示

//查看磁盘上的所有库名
show dbs;

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

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

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

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

 四、MongoDB数据库创建/删除

//创建使用库
use myschool;

//查看当前库对象
db;

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

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

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

//删除库
db.dropDatabase();

五、MongoDB操作集合

//当前库中创建集合、表
db.createCollection('student');
db.createCollection('teacher');

//查看当前库中的集合、表
show collections;
show tables;

//删除集合
db.teacher.drop();

六、 MongoDB数据类型

七、MongoDB在集合中插入数据

//插入数据
db.student.insert(
    {
        shuai: true,
        money: true,
        gf: [{ stuname: '小红' }, { stuname: '小黑' }]
    }
)
db.student.insert({ stuname: '张三', age: 16 })
db.student.insert({ stuname: '李四', age: 17 })
db.student.insert({ stuname: '王五', age: 16 })
db.student.insert({ stuname: '赵六', age: 18 })
db.student.insert({ stuname: '哈哈', age: '19' })
db.student.insert({ stuname: '赵六六', age: 18 })
db.student.insert({ stuname: '六六', age: 20 })
db.student.insert({ stuname: '六小龄童', age: 20 })
db.student.insert({ stuname: '刘小', age: 20 })
db.student.insert({ stuname: '小小', age: 21 })

插入的数据被称为文档。

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

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

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

db.集合名.insert(document)

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

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

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

}) 

八、MongoDB在集合中更新数据

//修改数据
use myschool;

//修改如果有多个结果符合条件时,只改_id最小的一个
db.student.update(
    { stuname: '赵六' },  //条件
    { $set: { age: 18 } }
);

//{mutil:true} 把所有符合条件的都修改
db.student.update(
    { stuname: '赵六' },  //条件
    { $set: { age: 25 } },
    { multi: true }
);
db.student.insert({ stuname: '赵六', age: 20 })

//{upsert:true}没有匹配到的数据作为新增值的主键
db.student.update(
    { stuname: '小张' },
    { $set: { age: 20 } },
    { upsert: true }
);

//数值改变(点赞!!!)
db.student.update(
    { stuname: '小张' },
    { $inc: { age: -50 } }
);

更新数据

语法:

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

{

         upsert:<boolean>,

        multi: <boolean>,

}

)

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

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

更新数据
如果我们想实现在某一列上在原有的值基础之上进行递增1效果可以用$inc运算符来实现
语法:
db.集合名.update({查询条件},{$inc:{字段名:NumberInt(1)}})

九、MongoDB在集合中删除文档

//删除数据
//全部删除
db.student.remove({});

//带条件删除
db.student.remove({ stuname: '张三' });

//注意
db.student.remove({ age: 60 });
//主键编号较小的一条数据
db.student.remove({ age: 16 }, { justOne: true });
db.student.remove({ age: '19' }, { justOne: true });

删除文档:

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() 

//查询
//全查
db.student.find();

//根据条件查询
db.student.find({ stuname: '赵六' });
//age 小于20岁的人
db.student.find({ age: { $lt: 20 } });

//age 大于等于18并且age1小于等于60
db.student.find(
    {
        age: { $gte: 18, $lte: 60 },
    }

);

十一、MongoDB查询条件(1)

十二、MongoDB的 And条件

//或$or
db.student.find(
    {
        $or: [
            { age: { $gte: 18 } },
            { age: { $lte: 60 } }
        ]
    }

);

十三、MongoDB范围条件

col"集合中 “key" 大于100,小于 200 的数据

> db.col.find({“key” : {$lt :200, $gt : 100}})

相当于RDBMS:

Select * from col where key>100 AND key<200;

十四、MongoDB的模糊查 

//模糊查询
//:/开始/结束
db.student.find({stuname:/六/});
db.student.find({stuname:/^六/});
db.student.find({stuname:/六$/});

十五、MongoDB的Limit 和 Skip操作

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

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

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

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

//分页
//limit(步长)
//skip((页码-1)*步长)
db.student.find().limit(2).skip((3-1)*2);

十六、MongoDB的统计

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

>db.col.count(【{key:value}】)

//统计
db.student.find({stuname:'赵六'}).count();

 十七、MongoDB的排序

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

//排序sort()
//1升序
//-1降序
db.student.find().sort({age:1});
db.student.find().sort({age:-1});

十八、MongoDB的索引

//索引
db.student.getIndexes();

//创建索引
db.student.createIndex({age:1});
db.student.createIndex({age:-1});

//删除索引
db.student.dropIndex({age:1});

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

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

相关文章

常用七大公司加密软件排行榜|2024年好用高效加密软件最新推荐

加密软件对于保护公司数据和确保信息安全至关重要。本文分享七款公司加密软件&#xff0c;每款软件的功能和优势都有所不同&#xff0c;可以根据企业的具体需求选择合适的解决方案。 1. 固信软件 功能&#xff1a; 固信软件提供全面的数据保护解决方案&#xff0c;透明加密、智…

Java开发者LLM实战——使用LangChain4j构建本地RAG系统

1、引言 由于目前比较火的chatGPT是预训练模型&#xff0c;而训练一个大模型是需要较长时间&#xff08;参数越多学习时间越长&#xff0c;保守估计一般是几个月&#xff0c;不差钱的可以多用点GPU缩短这个时间&#xff09;&#xff0c;这就导致了它所学习的知识不会是最新的&…

Stable Diffusion参数 - 步数、采样方法、提示词引导系数

1 迭代步数 一张图片的生成它需要多次迭代才能达到我们想要的一个效果。 理论上迭代步数越高&#xff0c;那生成的最终的这个图片的效果就越好&#xff0c;它质量更高。 实际在应用的时候迭代步数达到20以上&#xff0c;它的效果在提升的就不是十分明显了&#xff0c;而更多的…

基于python的百度迁徙迁入、迁出数据分析(三)

百度迁徙定义 百度迁徙释义&#xff1a; 百度迁徙以用户常住地所在地市或停留超过一天的非常住地定义为出发城市&#xff0c;以用户离开出发城市&#xff0c;并在非出发城市停留超过4 h以上定义为到达城市。采用4h阈值&#xff0c;排除了城际出行中的途经地。 定义参考来源…

当年很流行,现在已经淘汰的Java技术,请不要学了!【建议收藏】

在Java技术的发展历程中&#xff0c;确实有一些曾经流行但现在已经被淘汰或不再推荐使用的技术。了解这些技术可以帮助你避免学习过时的知识&#xff0c;从而更高效地提升自己的技能。 以下是一些曾经流行但现在已经不太推荐学习的Java技术&#xff1a; 1. Servlet 2.x&#x…

日程管理多源归一,服务场景一键直达

时间对于每个人来说都是非常宝贵的&#xff0c;曾经我们使用台历、挂历来标记和查看重要日程&#xff0c;通过翻页来见证时光的流逝&#xff0c;随着信息化时代的不断发展&#xff0c;更加灵活简洁的电子日历成为主流&#xff0c;日历也从一个最简单的日期看板&#xff0c;慢慢…

RuntimeError: No CUDA GPUs are available

RuntimeError: No CUDA GPUs are available 目录 RuntimeError: No CUDA GPUs are available 【常见模块错误】 【解决方案】 解决步骤如下&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科…

如何利用代理ip探索外国新闻视角?

引言 在日常的网络使用中我们常常会遇到诸多难题&#xff0c;让我们无法获取到想要的信息或服务&#xff0c;若访问速度很慢还会影响好的在线工作和娱乐体验。其次&#xff0c;随着网络安全问题的频发&#xff0c;个人隐私泄露成为了一个不容忽视的问题。这些痛点&#xff0c;…

React Native新架构系列-新架构介绍

从今天起&#xff0c;会陆续更新React Native新架构相关的系列内容&#xff0c;本系列基于React Native 0.73.4版本&#xff0c;从一名Android开发者的视角进行介绍。本系列介绍的内容默认读者对React Native有一定的了解&#xff0c;对基础的开发内容不再赘述。 前言 首先介绍…

AI绘画3分钟解决英文恐惧症,comfyui汉化插件

前言 全面解析&#xff1a;Comfy UI汉化插件的安装与配置指南 本文涉及的工作流和插件&#xff0c;需要的朋友请扫描免费获取哦 引言 本文图片来源网络&#xff0c;侵权联删除。 在全球化的今天&#xff0c;软件界面的本地化是提升用户体验的重要一环。对于许多非英语母语的…

辅听耳机芯片型号介绍—云信通讯

辅听耳机系列芯片介绍&#xff1a; 杰理芯片型号&#xff1a; AC7003D / AC7006F 芯片特点&#xff1a; 1.内置啸叫抑制算法 2.内置辅听专用动态多段增益调节 3.内置人声增强和环境噪声压制算法 4.公版手机app开放定制服务&#xff0c;支持听力测试和个性化增益配置 5.支…

WAAP替代传统WAF已成趋势

数字化时代&#xff0c;Web应用和API已成为企业运营的核心。然而&#xff0c;随着网络攻击手段的不断进化&#xff0c;自动化攻击愈发频繁&#xff0c;传统的Web应用防火墙&#xff08;WAF&#xff09;已难以满足现代企业的安全需求。WAAP&#xff08;Web Application and API …

Springboot手工艺品交易平台—计算机毕业设计源码11541

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对手工艺品交易平台等问题&#xff0c;对手工…

办公人导航-一个资源丰富的网站

办公人导航是一个资源丰富的网站&#xff0c;旨在为办公人员提供各种优质资源和工具&#xff0c;以提高工作效率和生活质量。 ★★★★★办公人导航&#xff1a;https://www.bgrdh.com/ 这个网站涵盖了以下几个方面&#xff1a; 综合性的导航平台&#xff1a;办公人导航集成了…

机械学习—零基础学习日志(高数15——函数极限性质)

零基础为了学人工智能&#xff0c;真的开始复习高数 这里我们将会学习函数极限的性质。 唯一性 来一个练习题&#xff1a; 再来一个练习&#xff1a; 这里我问了一下ChatGPT&#xff0c;如果一个值两侧分别趋近于正无穷&#xff0c;以及负无穷。理论上这个极限值应该说是不存…

虹科技术前沿 | TSN网络中时间感知整形器的性能验证实测

来源&#xff1a;虹科技术前沿 | TSN网络中时间感知整形器的性能验证实测 原文链接&#xff1a;https://mp.weixin.qq.com/s/h3hTRAAEVN42DjDRifGxnA 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #时间敏感网络 #TSN #时间感知整形器 导读 本文旨在验证时间敏感…

vscode搭建rust开发环境

由于rustrover不是免费的&#xff0c;此处教学搭建一套基于vscode的rust开发环境&#xff0c;可运行&#xff0c;可调式 1.下载vscode1.91.1 Download Visual Studio Code - Mac, Linux, Windows 2.下载插件 打开网站下载插件 rust-analyzer-0.4.2049、vscode-lldb-1.10.0、…

SQL数据库如何修改表中栏位的长度

1.问题 已经建立的表中MEMO 栏位原来长度是20&#xff0c;随着使用需要将MEMO长度调整为200&#xff1b; 即 MEMO VARCHAR&#xff08;20&#xff09; → MEMO VARCHAR(200&#xff09; 2.修改办法 -- ALTER TABLE 表名 ALTER COLUMN 栏位名字 类型(长度);ALTER T…

java通过poi解析word入门

文章目录 介绍一、了解word docx文档的结构二、引入POI的依赖三、解析Word文档常用API加载Word文档获取文档整体结构获取文档中的段落获取文档中的表格获取文档中的脚注 四、解析Word中的段落示例五、读取Word文档并遍历图片六、解析Word中的图片示例 介绍 Apache POI 是一个处…

6. 运行时数据区-程序计数器和栈帧

运行时数据区分类 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。运行时数据区分为两大类&#xff0c;线程共享和线程不共享&#xff0c;线程共享的有&#xff1a; 方法区堆 线程不共享的有&#xff1a; 程序计数器Java虚拟机栈本地方法栈…