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高度,但是不能自适应,此时需要一个直系父容器ÿ…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
