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的安装和主从复制等内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创新零售,京东重新答题?

继新一轮组织架构调整后&#xff0c;京东从低价到下沉动作不断。 新成立的创新零售部在京东老将闫小兵的带领下悄然完成了整合。近日&#xff0c;京喜拼拼已改名为京东拼拼&#xff0c;与七鲜、前置仓等业务共同承载起京东线上线下加速融合的梦想。 同时&#xff0c;拼拼的更…

FPGA: RS译码仿真过程

FPGA: RS译码仿真过程 在上一篇中记录了在FPGA中利用RS编码IP核完成信道编码的仿真过程&#xff0c;这篇记录利用译码IP核进行RS解码的仿真过程&#xff0c;带有程序和结果。 1. 开始准备 在进行解码的过程时&#xff0c;同时利用上一篇中的MATLAB仿真程序和编码过程&#x…

微信小程序|自定义弹窗组件

目录 引言小程序的流行和重要性自定义弹出组件作为提升用户体验和界面交互的有效方式什么是自定义弹出组件自定义弹出组件的概念弹出层组件在小程序中的作用和优势为什么需要自定义弹出组件现有的标准弹窗组件的局限性自定义弹出组件在解决这些问题上的优势最佳实践和注意事

日常BUG——Java使用Bigdecimal类型报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 直接上代码&#xff1a; Test public void test22() throws ParseException {System.out.p…

Linux怎样处理网络请求——彻底理解IO多路复用

常见的网络IO模型 网络 IO 模型分为四种&#xff1a;同步阻塞 IO、同步非阻塞IO、IO 多路复用、异步非阻塞 IO(Async IO, AIO)&#xff0c;其中AIO为异步IO&#xff0c;其他都是同步IO 同步阻塞IO 同步阻塞IO&#xff1a;在线程处理过程中&#xff0c;如果涉及到IO操作&…

这场大学生竞赛中,上百支队伍与合合信息用AI共克难题

目录 0 校企联合共克难题1 北京林业大学&#xff1a;文档格式转换2 浙江中医药大学&#xff1a;个性化题库3 中南林业科技大学&#xff1a;交互场景挖掘4 重庆邮电大学&#xff1a;大模型赋能智能文档5 总结 0 校企联合共克难题 近日&#xff0c;中国大学生服务外包创新创业大…

web前端开发基础入门html5+css3+js学习笔记(一)

目录 1.第一个前端程序2.前端工具的选择与安装3.VSCode开发者工具快捷键4.HTML5简介与基础骨架4.1 HTML5的DOCTYPE声明4.2 HTML5基本骨架4.2.1 html标签4.2.2 head标签4.2.3 body标签4.2.4 title标签4.2.5 meta标签 5.标签之标题5.1 快捷键5.1 标题标签位置摆放 6.标签之段落、…

GDP药品供应管理规范确保冷链运输合规性

药品运输面临许多挑战&#xff0c;包括产品可能因暴露在不利条件下导致降解。药品供应管理规范 (GDP) 运输指南在确保整个运输链的冷链合规性方面发挥着关键作用。 药品的分销与生产和制造生产线一样精细和敏感。自全球物流公司成立以来&#xff0c;配送过程中对受控环境的需求…

AI Chat 设计模式:14. 适配器模式

本文是该系列的第十四篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 关于适配器模式&#xff0c;如果由浅入深的来考察&#xff0c;你会依次提出什么问题…

【腾讯云 Cloud Studio 实战训练营】Hexo 框架 Butterfly 主题搭建个人博客

什么是Cloud Studio Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 ​ Hexo 博客成品展示 本人博客如下&…

根据一棵树的两种遍历构造二叉树

题目 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,…

sql server安装报错 合成活动模板库(ATL) 失败

错误 “合成活动模板库(ATL) 规则失败“ 解决办法&#xff1a; 进入SQL Server 2008R2安装包目录找到文件&#xff1a;sqlsupport_msi&#xff0c;安装此文件之后&#xff0c;再安装SQL Server&#xff0c;便可解决该问题。C:\SQL Server 2008R2\new\SQL Server 2008R2\2052_CH…

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册

引言 我使用到painter的原因是&#xff0c;在uniapp开发微信小程序时&#xff0c;需要将一个页面的内容转换成图片保存到本地相册。 起初在网上找到很多都是在uniapp中使用 html2canvas 将网页转换成图片再jspdf将图片转换为pdf&#xff0c;但是这种方式在小程序环境不支持&am…

【数据结构】二叉树链式结构的实现及其常见操作

目录 1.手搓二叉树 2.二叉树的遍历 2.1前序、中序以及后序遍历 2.2二叉树的层序遍历 3.二叉树的常见操作 3.1求二叉树节点数量 3.2求二叉树叶子节点数量 3.3求二叉树第k层节点个数 3.3求二叉树的深度 3.4二叉树查找值为x的节点 4.二叉树的销毁 1.手搓二叉树 在学习…

[数据集][目标检测]钢材表面缺陷目标检测数据集VOC格式2279张10类别

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;2279 标注数量(xml文件个数)&#xff1a;2279 标注类别数&#xff1a;10 标注类别名称:["yueyawan",&…

ceph数据分布

ceph的存储是无主结构&#xff0c;数据分布依赖client来计算&#xff0c;有两个条主要路径。 1、数据到PG 2、PG 到OSD 有两个假设&#xff1a; 第一&#xff0c;pg的数量稳定&#xff0c;可以认为保持不变&#xff1b; 第二&#xff0c; OSD的数量可以增减&#xff0c;OSD的…

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总 TI编译器分类 在CCS按照目录下 有个名为${CG_TOOL_ROOT}的目录 其下就是当前工程的编译器 存放目录为&#xff1a; C:\ti\ccs1240\ccs\tools\compiler按类型分为五种&#xff1a; ti-cgt-arm…

Appium Desktop安装

【提示&#xff1a;官方已不再维护&#xff0c;建议命令行方式安装&#xff0c;但可以学习了解一下】 Appium Desktop是一款适用于Mac、Windows和Linux的应用程序&#xff0c;它以漂亮灵活的UI为您提供Appium自动化服务器的强大功能。它基本上是Appium Server的图形界面。您可…

【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】

目录 1、 Frmebuffer(帧缓冲&#xff09;操作介绍1.1 显示设备的抽象1.2 内存映像1.3 输出画面数据1.4 用户态下操作屏显1.4.1 用文件I / O 操作屏显1.4.2 mmap() 函数1.4.3 ioctl()函数1.4.5 用命令操作屏1.4.6 测试程序 2、Framebuffer总体框架2.1 框架要点2.2 fbmem.c分析2.…

算法通关村第三关【黄金】| 数组元素出现次数问题

1.数字出现的次数超过数组长度的一半 方法一、使用Map键值对来记录每个元素出现的次数&#xff0c;返回次数大于一半的 class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer> map new HashMap<>();for(int i 0;i<nums.length;i){m…