MongoDB Shell操作

目录

1 数据库操作

2 集合操作

3 文档操作

3.1 插入文档(insert|insertOne|insertMany)

3.2插入、删除的循环操作

3.2 删除文档(remove|deleteOne|deleteMany)

3.3 更新文档(update|save)

3.4 查询文档(find)

4 游标

5 索引

6 聚合



1 数据库操作

        当新创建的数据库里没有插入数据时,并不会被查询到相应的信息,只有插入数据的数据库才会显示其相应的信息。

        在对某个数据库进行相关操作时,需先使用use命令选择执行该数据库。

#创建数据库myDB(use命令在数据库已存在时就是选择执行,否则就是创建)
use myDB#查看数据库
show dbs#选择执行myDB数据库
use myDB#统计数据信息
db.stats()#查看当前数据库下的所有集合
show collections
db.getCollectionNames()#删除当前数据库
db.dropDatabase()

2 集合操作

🏅普通集合操作

#创建集合
db.createCollection("myCollection")  //显式创建myCollection
sb.stu.insert({name: "jack"})        //隐式创建stu#查询集合
show collections#查看集合的详细信息
db.getCollectionInfos()#集合重命名
db.myCollection.renameCollection("myColl")#查看集合统计信息
db.myCollecyion.stats()#删除集合
db.myCollection.drop()

🏅定长集合操作

#定长集合的创建
db.createCollection("myCollection",{capped:true,size:3})#判断集合是否为定长集合
db.myCollection.isCapped()#普通集合转定长集合
db.runCommand({convertToCapped:"stu1",size:100})

3 文档操作

3.1 插入文档(insert|insertOne|insertMany)

#向stu集合插入一个文档
db.stu.insert({item: "card",qty: 15})#向stu集合插入多个文档
db.stu.insert([{item: "card",qty: 15},{item: "card1",qty: 16},{item: "card2",qty: 17}]
)#使用变量方式插入多个文档
document=[{item: "card",qty: 15},{item: "card1",qty: 16},{item: "card2",qty: 17}]
db.stu.insert(document)#insertOne只能用来一次插入一个文档
#insertMany可以用来一次插入多个文档
#具体用法与insert的一样

3.2插入、删除的循环操作

 💥循环插入10条数据
for(var i=1,age=20;i<=10;i++,age++)db.stu.insert({name:"jack"+i,age:age})

💥将一个集合的数据插入到另一个新建集合
db.stu1.find().forEach(function(x)){db.stu2.insert(x);}

💥循环修改集合中的文档数据

for(var i=6;i<=10;i++)db.stu2.update({"name":["jack"+i,"tom"+i]},{$set:{"name":"tom"+i}})

3.2 删除文档(remove|deleteOne|deleteMany)

#删除stu数据库中满足条件的所有文档
db.stu.remove({条件})#删除stu数据库中满足条件的一条文档
db.stu.remove({条件},justOne:true)#删除stu集合下的所有文档
db.stu.deleteMany({})#删除stu集合下的所有满足条件的文档
db.stu.deleteMany({条件})#删除stu集合下的所有满足条件的一条文档
db.stu.deleteOne({条件})

3.3 更新文档(update|save)

db.集合名.update({条件},{$set:{字段名:修改后的值}})#将stu集合中item为card的文档中qty值修改为35
db.stu.update({item: "card"},{$set: {qty: 35}}
)#save命令进行更新
db.stu.save({"_id": 10,item: "card",qty: 35})

save与update命令的区别

  • save按_id进行匹配查找,修改的文档若存在就进行修改,若不存在则创建该文档并插入集合
  • update按条件匹配查找,修改的文档若存在就进行修改,若不存在则会抛异常

3.4 查询文档(find)

比较条件符号事例
等于:db.stu.find({price:24})
大于$gt:db.stu.find({price:{$gt:24}})
小于$lt:db.stu.find({price:{$lt:24}})
大于等于$gte:db.stu.find({price:{$gte:24}})
小于等于$lte:db.stu.find({price:{$lte:24}})
不等于(数值)$ne:db.stu.find({price:{$ne:24}})
不等于(字符串)$not:db.stu.find({name:{$not:"《MongoDB 教程》"}})
{ , ,}db.stu.find({price:{$gt:24}},{name:"《MongoDB教程》"})
$or[{ , ,}]db.stu.find({$or:[{price:{$gt:24}},{name:"《MongoDB教程》"}]})
包含$in:db.stu.find({price:{$in:[23,24,25]}})
不包含$nin:db.stu.find({price:{$nin:[23,24,25]}})
包含元素个数$size:

tags属性中值为数组且包含三个元素的

db.stu.find(tags:{$size:3}})

配合find使用的其它方法

#age:null不仅会匹配到age的值为null的文档,还会匹配到不包含age这个键的文档。
db.stu.find({age:null})#限制返回值
db.stu.find().limit(3)#指定跳过第几个文档
db.stu.find().skip(3)     //跳过第三个#查询结果排序
查询结果按照指定属性升序显示(-1降序)
db.stu.find().sort({"属性":1})

4 游标

        db.stu.find()返回的就是一个游标,可以声明一个变量进行接收,它是数据遍历过程中的内部指针,是数据读取的接口。

        游标使用find方法返回,故上面说到配合find方法使用的sort、limit、skip等方法也可以使用,此外还有hint方法(强制使用索引进行查询)。

#声明游标并进行遍历
var cursor = db.stu.find()    //声明游标
while (cursor.hasNext()){     //判断游标的下一位有没有值var doc = cursor.next();  //有值的情况下在声明变量进行接收print(doc.name);          //print(doc);               //输出的是一条BSON类型的数据printjson(doc);           //转成JSON的形式输出print(tojson(doc));       //同上一行效果
}

5 索引

        什么叫索引呢?在没有索引的情况下,用户要是想要查询某个文档的话就必须扫描集合中的所有文档,来选择与查询条件相匹配的文档。然而,在有索引存在的情况下,用户可以先查询索引中是否有想要查询的文档,如果有的情况下就可以直接读,从而节约了大量的时间。

        索引的优点:提升文档的查询速率。相对而言,因为插入新的文档会引起索引顺序的重拍,从而会降低插入、更新的速率。

        MongoDB的索引基于B-tree数据结构,MySQL的索引基于B+tree数据结构。

#单索引
对stu集合中的score字段创建升序索引(-1降序)
索引名为:index1(索引名默认为字段名_1)
db.stu.createIndex({score:1},name:"index1")#复合索引
对stu集合中的score字段创建升序索引,state降序索引
db.stu.createIndex({score:1,state:-1})#唯一索引
对stu集合中的score字段创建升序唯一索引
db.stu.createIndex({score:1},{unique:true})#查询stu集合的所有索引
db.stu.getIndexes()#查询索引所占空间大小
db.stu.totalIndexSize()#删除索引
索引的所有属性都不能有所不同,否则会删错索引,或提示无此索引
db.stu.dropIndex({score:1})
删除除_id索引外的所有索引
db.stu.dropIndexes()#修改索引
先删除需要修改的索引,在创建一个修改后的索引

6 聚合

对返回的文档进行统计分析,使用aggregate方法实现。

💥管道操作:$match(过滤) $group(分组) $project(显示字段) $sort(排序) $limit(限制) $skip(跳过)

💥聚合运算符: $sum(求和) $avg(均值) $min(最小值) $max(最大值) $first $last $push

#只显示stu集合里文档的quantity和pnumber字段
db.stu.aggregate({$project:{quantity:1,pnumber:1,price:0}})#过滤出stu集合里price大于4.0的所有文档
db.stu.aggregate({$match:{price:{$gt:4.0}}})#对price字段升序排列
db.stu.aggregate({$sort:{price:1}})#返回stu集合的前三个文档并跳过第一项
db.stu.aggregate({$limit:3},{$skip:1})

分组求和的两种方式

#管道聚合
按编号分组,并统计商品数量
db.stu.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}}])#MapReduce
var mapFunc = function(){
emit(this.pnumber,this.quantity);
};var reduceFunc = function(key,values){
return Arrary.sum(values);
};db.stu.mapReduce(mapFunc,reduceFunc,{out:{replace:'result'}})    //创建一个集合用来接收结果

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

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

相关文章

MongoDB副本集、分片集的伪分布式部署(保姆级教程)

目录 1 集群架构(概念篇) 1.1 MongoDB核心组件 1.2 主从复制 1.3 副本集 1.4 分片集 2 集群搭建 2.1 部署副本集(伪分布式) 2.2 分片集部署(伪分布式) 2.3 副本集与分片集区别 1 集群架构(概念篇) MongoDB有三种集群部署模式&#xff0c;分别是主从复制(Master-Slave)…

【手把手 脑把脑】教会你使用idea基于MapReduce的统计数据分析(从问题分析到代码编写)

目录 1 编程前总分析 1.1 数据源 1.2 需要掌握的知识 1.2.1 Hadoop对比java的数据类型 1.2.2 MapReduce流程简介 1.3.3 MapReduce流程细分 2 编码阶段 2.1 导入依赖 2.2 mapper 2.3 reducer 2.4 main 1 编程前总分析 1.1 数据源 英语,李沐,85,男,20 数学,李沐,54,男…

【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)

目录 1 数据源(学生成绩.csv) 2 hadoop平台上传数据源 3 idea代码 3.1 工程框架 3.2 导入依赖 3.3 系统主入口(menu) 3.4 六个mapreduce 3.4.1 计算每门成绩的最高分、最低分、平均分(Mma) 3.4.2 计算每个学生的总分及平均成绩并进行排序(Sas) 3.4.3 统计所有学生的信…

Git 的安装、使用、分支、命令 一篇博客全都学会

目录 1 版本控制 1.1 什么是版本控制 1.2 为什么需要版本控制 2 Git概述 2.1 Git的工作机制 2.2 分布式版本控制工具与集中式的区别 2.3 Git是如何诞生的 3 Git的安装 4 Git常用命令 4.1 用户签名的设置和修改 4.2 查看用户签名的设置 4.3 初始化本地库 4.4 添加、…

生成一个GitHub的token用于git推送本地库至远程库

1 一步步选择设置 2 使用链接直接跳转到最后一步的设置页 git push 的时候需要token&#xff0c;所以在GitHub上生成一个临时的token 1 一步步选择设置 2 使用链接直接跳转到最后一步的设置页 前提是你已经在这个浏览器上登陆了GitHub https://github.com/settings/tokens

都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?

1 对自己的远程库操作 1.1 在GitHub上创建远程库 1.2 推送本地库至远程库 1.3 拉取远程库到本地库 1.4 克隆远程仓库到本地 2 对别人的远程库两种操作方式 2.1 使用GitHub进行团队内协作开发 2.2 使用GitHub进行跨团队协作开发 众所周知&#xff0c;GitHub是一个大型的国…

2021 最新 IDEA集成Gitee、Gitee迁移GitHub【图文讲解】

1 创建远程库 2 IDEA集成Gitee 2.1 安装gitee插件并绑定账号 2.2 IDEA推送本地库至远程库的两种方式 2.3 修改后推送本地库至远程库 2.4 拉取远程库 2.5 使用IDEA克隆远程库 3 Gitee迁移GitHub的远程库的两种方式 3.1 自己的账户之间迁移 3.2 使用链接进行迁移 3.3 强制刷…

只需五步学会Maven 3.6.1OR 3.6.3及其他版本的下载安装与配置【图文详解】

第一步&#xff0c;下载并解压缩包 ​第二步&#xff0c;配置两个环境变量 ​第三步&#xff0c;测试是否安装成功 ​第四步&#xff0c;指定本地仓库的路径 第五步&#xff0c;修改镜像仓库 第一步&#xff0c;下载并解压缩包 Maven官方下载地址&#xff1a;https://mav…

只需四步完成java JDK1.8的下载安装与配置【图文详解】

第一步&#xff0c;下载安装包并安装 第二步&#xff0c;安装JDK 第三步&#xff0c;配置三个环境变量 第四步&#xff0c;测试是否安装成功 第一步&#xff0c;下载安装包并安装 Oracle的官方下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#ja…

从Maven中央仓库网站下载jar包的两种方式,将会伴随java后端开发者的整个职业生涯

这个肥肠重要的网站就是&#xff1a;https://mvnrepository.com/ 下面我会以mysql-connector-java-8.0.26.jar为例&#xff0c;教会你使用两种方式下载使用jar包资源 首先在搜索栏使用全称或者是关键字对jar包进行搜索 选择你想要的版本 方式一&#xff1a;导入pom文件依赖(…

2021 使用IDEA创建并编写你的第一个Maven项目【图文详解】

1 使用IDEA创建你的第一个Maven项目 2 使用IDEA编写一个Maven项目 1 使用IDEA创建你的第一个Maven项目 新建一个空白项目 File-->New-->Project-->Empty Project 在IDEA中配置JDK 在IDEA中配置Maven 新建一个Maven模块 在test目录下面新建一个resources文件夹 2 使…

能让你的Intellij IDEA 起飞的几个设置(设置背景 字体 快捷键 鼠标悬停提示 提示忽略大小写 取消单行显示)

1 设置主题(背景图片) 2 设置字体 2.1 设置默认的字体及其大小、行间距**墙裂推荐** 2.2 设置字体大小可以随意改变**墙裂推荐** 3 设置鼠标悬停提示 4 提示的时候忽略大小写**墙裂推荐** ​​5 取消单行显示tabs**墙裂推荐** 6 修改类头的文档注释信息 7 设置项目文…

控制台:Unable to import maven project: See logs for details日志:Unable to create injector, see the follow

问题描述&#xff1a; 当我在使用IDEA 完成一个Maven项目的时候&#xff0c;在第一步的pom.xml文件导入依赖时就发生了这个问题&#xff0c;弹窗弹出Uable to import maven project 控制台报 Unable to import maven project: See logs for details的异常。 既然人家都让查看l…

Maven基础教程

1 Maven简介 2 Maven基础概念 2.1 仓库 2.2 坐标 3 依赖的相关知识点 4 生命周期与插件 5 使用Inteli idea完成第一个Maven项目 1 Maven简介 Maven的本质就是一个项目管理工具&#xff0c;用于将项目开发和管理过程抽象成一个项目对象模型(project object model POM) Ma…

【Java从入门到头秃专栏 】(一)学在Java语法之前

目录 1 初识Java 2 Java环境JDK 3 Java规范 1 初识Java Java是美国的sun(Stanford University Network)公司在1995年推出的一门计算机高级编程语言&#xff0c;虽然说当时参与开发Java的人员有好几名&#xff0c;但是业内公认的Java之父是詹姆斯高斯林(James Gosling)。 Jav…

【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出

目录 1 注释 2 数据类型 3 变量与常量 4 关键字、标识符 5 运算符 6 键入值、输出值 1 注释 注释就是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便大家更加容易理解程序。注释虽然写在程序中&#xff0c;但是并不参与程序的执行&#…

【Java从入门到头秃专栏 】(三) 控制流程 Math Date DateFormat Calendar System BigDecimal Random

目录 1 控制流程 2 Math类 3 Date类 4 DateFormat类 5 Calendar类(日历类) 6 System类 7 BigDecimal类 8 Random类(随机数) 1 控制流程 1.1 块作用域 块(即复合语句)就是指由若干条Java语句组成的语句&#xff0c;并用一条大括号括起来&#xff0c;并借此形式确定了变量…

IntelliJ IDEA最常用的一些快捷键,学会了室友还以为你在祖安对线

目录 1 快速生成语句 1.1 main语句 1.2 输出语句 1.3 流程控制语句 1.3.1 if判断语句 1.3.2 while循环 1.3.3 for循环 1.3.4 数组、集合的循环操作 1.3.5 迭代器循环操作 1.4 对象实例化、定义变量 1.5 try-catch异常 2 快捷键 2.1 Ctrl系列 2.2 alt系列 2.2.1…

【Java从入门到头秃专栏 6】语法篇(五) :多线程 线程池 可见、原子性 并发包 Lambda表达式

目录 1 多线程 1.1 基本概念 1.2 创建线程的三种方式 1.4 解决线程安全问题的三种方法 1.5 线程通信 1.6 线程状态 2 线程池 2.1线程池的概念 2.2 创建并提交任务 3 可见性 3.1 变量不可见性 3.2 变量不可见性的解决方案 4 原子性 4.1 原子性的概念 4.2 保证原…

【Java从入门到头秃专栏 7】语法篇(六) :Lambda表达式(->) 方法引用(::) stream流

目录 1 Lambda表达式( -> ) ​ 2 方法引用( :: ) 3 Stream流 接下来介绍的三种语法叫&#xff1a;Lambda表达式 方法引用 stream流&#xff0c;这三种语法的使用要有特定条件&#xff0c;在一定条件下借助这三种语法可以使代码十分简单且优雅&#xff0c;但是不要舍本逐末…