Mongodb基础操作
一、简介
MongoDB是一个NoSQL型的数据库,基于分布式文档型储存数据库,由C++语言编写,它的特点是开源、高性能、高可用、高扩展、易部署。支持 Golang、RUBY、PYTHON、JAVA、C++、PHP等多种开发语言。
二、应用场景
MongoDB适用于高并发读写、数据量大、高可扩展性和高可用性且对事务要求不高的场景,常用的应用场景有以下:
1. 社交应用:可以使用MongoDB来存储用户信息和朋友圈动态,实现附近的人等功能。
2. 游戏:使用MongoDB来存储用户基础信息,以及游戏中的积分、等级以及装备等用户关联信息。
3. 物流:使用MongoDB存储订单信息,以及物流轨迹信息。
4. 物联网:使用MongoDB存储各设备信息,以及个设备的产生的日志信息,以便于对设备进行分析、维护和预警。
5. 视频直播:使用MongoDB来吃存储用户信息,以及用户操作日志、点赞、收藏和评价。
三、基础操作
1、创建集合
集合的创建分为隐式创建和显式创建。
显式创建:db.createCollection(name)。
隐式创建:当向一个集合插入一个文档时,如果集合不存在则会自动创建集合。
2、插入操作:
insert插入:插入单个数据。
db.user.insert({name:"张三",age:19,sex:1})
insertMany插入:插入多条数据。
db.user.insertMany([{name:"李四",age:24,sex:1},{name:"王五",age:20,sex:0}])

3、查询操作:
查询操作使用find()或findOne()进行查询,其中findOne()只查询出一条数据。
find查询
db.user.find({age:20},{_id:0,age:1,name:1});
// 等同于:select age,name from user where age=20;
比较查询
| 操作 | 操作符 | 查询格式 |
| 小于 | $lt | {age:{$lt:18}} // where age<18 |
| 小于等于 | $lte | {age:{$lte:18}} // where age<=18 |
| 大于 | $gt | {age:{$gt:18}} // where age>18 |
| 大于等于 | $gte | {age:{$gte:18}} // where age>=18 |
| 不等于 | $ne | {age:{$ne:18}} // where age<>18 |
db.user.find({age:{$lt:30}})
//等同于 select * from user where age<30;

逻辑查询
and查询
db.user.find({$and:[{age:20},{sex:0}]});
// 等同于 select * from user where age=20 and sex=0

或者缺省$and
db.user.find({age:20,sex:0})
or查询
db.user.find({$or:[{age:{$lt:24}},{sex:1}]});
//等同于 select * from user where age<24 or sex=1

混合查询
db.user.find({$or:
[{sex:1},
{$and:
[{age:20},{sex:0}]
}]});
//等同于 select * from user where sex=1 or(age=20 and sex=0)

in 和nin 查询
db.user.find({age:{$in:[18,19,20]}})
//等同于 select * from user where age in (18,19,20)

db.user.find({age:{$nin:[18,19,20]}})
//等同于 select * from user where age not in (18,19,20)
为空查询
db.user.find({name:{$exists:1}});
//等同于 select * from user where name is not null;

分页查询
db.user.find().skip(2).limit(2).sort({age:1});
//等同于 select * from user order by age asc limit 2,2;

分组查询
使用聚合方法aggregate()。
db.user.aggregate([{$group:{_id:"$sex",min_age:{$min:"$age"}}}]);
//等同于 select sex,min($age) from user group by sex; //获取男女中最小年龄

db.user.aggregate([{$group:{_id:"$sex",sex_total:{$sum:1}}}]);
//等同于 select sex,count(1) from user group by sex;// 统计男女的个数

其他聚合操作
| 操作 | 描述 | 示例 |
| $avg | 计算平均值。 | db.user.aggregate([{$group:{_id:"$sex",avg_age:{$avg:"$age"}}}]) |
| $max | 求最大值。 | db.user.aggregate([{$group:{_id:"$sex",min_age:{$max:"$age"}}}]) |
| $push | 将值加入一个数组中,不判断重复。 | db.user.aggregate([{$group:{_id:"$sex",name:{$push:"$name"}}}]) |
| $addToSet | 将值加入一个数组中,会判断是重复,若重复则不加入。 | db.user.aggregate([{$group:{_id:"$sex",name:{$addToSet:"$name"}}}]) |
| $first | 获取第一个文档数据 | db.user.aggregate([{$group:{_id:"$sex",first_name:{$first:"$name"}}}]) |
| $last | 获取最后一个文档数据 | db.user.aggregate([{$group:{_id:"$sex",last_name:{$last:"$name"}}}]) |
4、更新操作
db.user.update({查询条件},{更新操作},不存在时是否插入,是否多条,异常级别)。
db.user.update({name:"张三"},{$set:{age:40}}) // 将张三的年龄修改为40
db.user.update({name:"张三"},{$inc:{age:2}}) //将张三的年龄加2
5、删除操作
删除集合(此操作慎用)
db.user.drop();
删除文档
db.user.remove({查询条件})
四、索引
1. 创建索引
db.user.createIndex({age:1}) // 创建index_age 按升序排序
2. 查看索引
db.user.getIndexes()
3. 查看索引大小
db.user.totalIndexSize()
4. 删除索引
db.user.dropIndex(索引名);
db.user.dropIndexes();//删除集合所有索引
总结:
本文主要介绍了MongoDB的常用的基础操作,操作方式主要使用的是json类型的条件语句,对json编写的要求较高,其操作和MySQL的操作基本相同,除了MongoDB没有join查询以外其他查询都支持,后续会给大家分享MongoDB的安装和主从复制等内容。
相关文章:
Mongodb基础操作
一、简介 MongoDB是一个NoSQL型的数据库,基于分布式文档型储存数据库,由C语言编写,它的特点是开源、高性能、高可用、高扩展、易部署。支持 Golang、RUBY、PYTHON、JAVA、C、PHP等多种开发语言。 二、应用场景 MongoDB适用于高并发读写、数据…...
数据结构与算法:计算机科学的基石
文章目录 数据结构:构建数据的框架算法:问题的解决方案编程语言:实现数据结构的工具结论 🎉欢迎来到数据结构学习专栏~数据结构与算法:计算机科学的基石 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&…...
曲线救国 | 双非渣硕的秋招路
作者 | 带带大兄弟 面试锦囊之面经分享系列,持续更新中 欢迎后台回复"面试"加入讨论组交流噢 一篇旧文,可以参考~ 写在前面 双非渣硕,0实习,3篇水文,三个给老板当打工仔的nlp横向项目,八月份开…...
气传导耳机怎么样?四款值得入手的气传导耳机推荐
随着科技的进步,蓝牙耳机越来越受欢迎。类型也越来越多,其中气传导耳机因其不入耳设计,佩戴更舒适,音质更自然,能够提供更为清晰、自然的音质。面对还不知如何挑选气传导耳机的用户,在这里,我…...
HTML <svg> 标签
实例 画一个圆: <svg width="100" height="100"><circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /> </svg>页面下方有更多 TIY 实例。…...
Python随机密码生成。编写程序,在26个字母大小写和10个数字随机生成10个8位密码。
题目:随机密码生成。编写程序,在26个字母大小写和10个数字随机生成10个8位密码。 样例:类似AB12cdHi的十组8位密码。 代码: import random def passwords():a, b, c ord(a), ord(A), ord(1)r list(range(a , a 26)) list(ra…...
数据结构作业——哈夫曼树
/*【基本要求】 (1) 从文件中读出一篇英文文章,包含字母和空格等字符。 (2) 统计各个字符出现的频度。 (3) 根据出现的频度,为每个出现的字符建立一个哈夫曼编码,并输出。…...
Python XML处理中级篇:深入探索lxml库
lxml库是Python中处理XML和HTML文档的强大库,提供了丰富的API以进行各种操作。在初级篇中,我们介绍了如何使用lxml库解析、访问和修改XML文档。在这篇中级篇中,我们将更深入地探讨如何使用lxml库,包括如何创建XML文档,…...
岩棉革新——洛科威推出NGF新一代岩棉产品
作为全球领先的岩棉制品生产商,洛科威公司基于在岩棉性能革新领域八十多年的深入研究和生产工艺的不断优化,在中国市场正式推出NGF新一代岩棉制品,并在上海国际绿色建筑建材博览会和2023国际绿色低碳技术展上正式发布。 洛科威NGF产品作为革…...
关于 docker 基础题目
1.安装docker服务,配置镜像加速器 http://t.csdn.cn/E3zQ8 2.下载系统镜像(Ubuntu、 centos) 执行该命令后,Docker会自动从Docker Hub镜像库中下载Ubuntu镜像,并将其保存到本地计算机上: [rootmaster ~]# docker pull …...
Skywalking全链路追踪【学习笔记】
Skywalking全链路追踪的服务搭建,使用docker进行安装。 搭建服务 搭建【ES】 # 拉取 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.10 # 启动 docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.typesingle-nod…...
Sphinx——Python生成API文档
1、简介 Sphinx是Python文档生成器,它基于reStructuredText标记语言,可自动根据项目生成HTML,PDF等格式的文档,无数著名项目的文档均用Sphinx生成,如机器学习库scikit-learn、交互式神器Jupyter Notebook sphinx是一…...
倒计时动效
1. 效果 2. html <div class"count"><span>3</span><span>2</span><span>1</span> </div>3. css body {width: 100vw;height: 100vh;overflow: hidden;display: flex;justify-content: center;align-items: cente…...
安卓主板定制_电磁屏/电容屏安卓平板基于MTK联发科方案定制
定制化行业平板 在各行各业中的地位越来越重要,甚至在行业转型和发展中发挥着不可替代的作用。随着工业化社会的快速发展,工业生产对智控设备要求越来越高,运用的范畴也越来越普遍广泛,工业级平板就是其中一种应用广泛的设备。 新…...
Unity 之 ScreenPointToRay() (将点转换成射线的方法)
文章目录 ScreenPointToRay() ScreenPointToRay() ScreenPointToRay() 是Unity中Camera类的一个方法,用于将屏幕上的一个点转换为一条射线。这条射线的起点是摄像机在屏幕上对应的点,方向是从摄像机出发指向那个点。这在进行射线命中检测时非常有用&…...
C++ 线程池
目录 一、线程池实现原理 二、定义线程池的结构 三、创建线程池实例 四、添加工作的线程的任务函数 五、管理者线程的任务函数 六、往线程池中添加任务 七、获取线程池工作的线程数量与活着的线程数量 八、线程池的销毁 一、线程池实现原理 线程池的组成主要分为3个部…...
测试框架pytest教程(6)钩子函数hook开发pytest插件
pytest hook 函数也叫钩子函数,pytest 提供了大量的钩子函数,可以在用例的不同生命周期自动调用。 比如,在测试用例收集阶段,可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的,使…...
【Rust】Rust学习 第十七章Rust 的面向对象特性
面向对象编程(Object-Oriented Programming,OOP)是一种模式化编程方式。对象(Object)来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构中对象之间的消息传递。他在 1967 年创造了 面向对…...
Redis系列(四):哨兵机制详解
首发博客地址 https://blog.zysicyj.top/ 前面我们说过,redis采用了读写分离的方式实现高可靠。后面我们说了,为了防止主节点压力过大,优化成了主-从-从模式 思考一个问题,主节点此时挂了怎么办 这里主从模式下涉及到的几个问题&a…...
一个滚动框高度动态计算解决方案
需求描述,一个嵌套了很多层div或者其他标签的内容框,而它的外层没有设置高度,或者使用百分比,而本容器需要设置高度来实现滚动,要么写死px高度,但是不能自适应,此时需要一个直系父容器ÿ…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
