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

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型的数据库&#xff0c;基于分布式文档型储存数据库&#xff0c;由C语言编写&#xff0c;它的特点是开源、高性能、高可用、高扩展、易部署。支持 Golang、RUBY、PYTHON、JAVA、C、PHP等多种开发语言。 二、应用场景 MongoDB适用于高并发读写、数据…...

数据结构与算法:计算机科学的基石

文章目录 数据结构&#xff1a;构建数据的框架算法&#xff1a;问题的解决方案编程语言&#xff1a;实现数据结构的工具结论 &#x1f389;欢迎来到数据结构学习专栏~数据结构与算法&#xff1a;计算机科学的基石 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&…...

曲线救国 | 双非渣硕的秋招路

作者 | 带带大兄弟 面试锦囊之面经分享系列&#xff0c;持续更新中 欢迎后台回复"面试"加入讨论组交流噢 一篇旧文&#xff0c;可以参考~ 写在前面 双非渣硕&#xff0c;0实习&#xff0c;3篇水文&#xff0c;三个给老板当打工仔的nlp横向项目&#xff0c;八月份开…...

气传导耳机怎么样?四款值得入手的气传导耳机推荐

​随着科技的进步&#xff0c;蓝牙耳机越来越受欢迎。类型也越来越多&#xff0c;其中气传导耳机因其不入耳设计&#xff0c;佩戴更舒适&#xff0c;音质更自然&#xff0c;能够提供更为清晰、自然的音质。面对还不知如何挑选气传导耳机的用户&#xff0c;在这里&#xff0c;我…...

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位密码。

题目&#xff1a;随机密码生成。编写程序&#xff0c;在26个字母大小写和10个数字随机生成10个8位密码。 样例&#xff1a;类似AB12cdHi的十组8位密码。 代码&#xff1a; import random def passwords():a, b, c ord(a), ord(A), ord(1)r list(range(a , a 26)) list(ra…...

数据结构作业——哈夫曼树

/*【基本要求】 &#xff08;1&#xff09; 从文件中读出一篇英文文章&#xff0c;包含字母和空格等字符。 &#xff08;2&#xff09; 统计各个字符出现的频度。 &#xff08;3&#xff09; 根据出现的频度&#xff0c;为每个出现的字符建立一个哈夫曼编码&#xff0c;并输出。…...

Python XML处理中级篇:深入探索lxml库

lxml库是Python中处理XML和HTML文档的强大库&#xff0c;提供了丰富的API以进行各种操作。在初级篇中&#xff0c;我们介绍了如何使用lxml库解析、访问和修改XML文档。在这篇中级篇中&#xff0c;我们将更深入地探讨如何使用lxml库&#xff0c;包括如何创建XML文档&#xff0c;…...

岩棉革新——洛科威推出NGF新一代岩棉产品

作为全球领先的岩棉制品生产商&#xff0c;洛科威公司基于在岩棉性能革新领域八十多年的深入研究和生产工艺的不断优化&#xff0c;在中国市场正式推出NGF新一代岩棉制品&#xff0c;并在上海国际绿色建筑建材博览会和2023国际绿色低碳技术展上正式发布。 洛科威NGF产品作为革…...

关于 docker 基础题目

1.安装docker服务&#xff0c;配置镜像加速器 http://t.csdn.cn/E3zQ8 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 执行该命令后&#xff0c;Docker会自动从Docker Hub镜像库中下载Ubuntu镜像&#xff0c;并将其保存到本地计算机上: [rootmaster ~]# docker pull …...

Skywalking全链路追踪【学习笔记】

Skywalking全链路追踪的服务搭建&#xff0c;使用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文档生成器&#xff0c;它基于reStructuredText标记语言&#xff0c;可自动根据项目生成HTML&#xff0c;PDF等格式的文档&#xff0c;无数著名项目的文档均用Sphinx生成&#xff0c;如机器学习库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联发科方案定制

定制化行业平板 在各行各业中的地位越来越重要&#xff0c;甚至在行业转型和发展中发挥着不可替代的作用。随着工业化社会的快速发展&#xff0c;工业生产对智控设备要求越来越高&#xff0c;运用的范畴也越来越普遍广泛&#xff0c;工业级平板就是其中一种应用广泛的设备。 新…...

Unity 之 ScreenPointToRay() (将点转换成射线的方法)

文章目录 ScreenPointToRay() ScreenPointToRay() ScreenPointToRay() 是Unity中Camera类的一个方法&#xff0c;用于将屏幕上的一个点转换为一条射线。这条射线的起点是摄像机在屏幕上对应的点&#xff0c;方向是从摄像机出发指向那个点。这在进行射线命中检测时非常有用&…...

C++ 线程池

目录 一、线程池实现原理 二、定义线程池的结构 三、创建线程池实例 四、添加工作的线程的任务函数 五、管理者线程的任务函数 六、往线程池中添加任务 七、获取线程池工作的线程数量与活着的线程数量 八、线程池的销毁 一、线程池实现原理 线程池的组成主要分为3个部…...

测试框架pytest教程(6)钩子函数hook开发pytest插件

pytest hook 函数也叫钩子函数&#xff0c;pytest 提供了大量的钩子函数&#xff0c;可以在用例的不同生命周期自动调用。 比如&#xff0c;在测试用例收集阶段&#xff0c;可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的&#xff0c;使…...

【Rust】Rust学习 第十七章Rust 的面向对象特性

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种模式化编程方式。对象&#xff08;Object&#xff09;来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构中对象之间的消息传递。他在 1967 年创造了 面向对…...

Redis系列(四):哨兵机制详解

首发博客地址 https://blog.zysicyj.top/ 前面我们说过&#xff0c;redis采用了读写分离的方式实现高可靠。后面我们说了&#xff0c;为了防止主节点压力过大&#xff0c;优化成了主-从-从模式 思考一个问题&#xff0c;主节点此时挂了怎么办 这里主从模式下涉及到的几个问题&a…...

一个滚动框高度动态计算解决方案

需求描述&#xff0c;一个嵌套了很多层div或者其他标签的内容框&#xff0c;而它的外层没有设置高度&#xff0c;或者使用百分比&#xff0c;而本容器需要设置高度来实现滚动&#xff0c;要么写死px高度&#xff0c;但是不能自适应&#xff0c;此时需要一个直系父容器&#xff…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...