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)…

非关型数据库之MongoDB

目录 1 MongoDB简介 1.1 初识MongoDB 1.2 MongoDB与传统的关系型数据库的区别 1.3 MongoDB存储结构 1.4 BSON支持的数据类型 2 MongoDB Shell操作 3 MongoDB集群操作 1 MongoDB简介 1.1 初识MongoDB MongoDB来源自英文单词"Humongous”&#xff0c;译为“庞大的”…

【手把手 脑把脑】教会你使用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 统计所有学生的信…

【单位换算】存储单位(bit Byte KB MB GB TB PB EB ZB YB BB)时间单位(ms μs ns ps)长度单位(dm cm mm μm nm pm fm am zm ym)

存储单位 相邻单位相差2⁰&#xff0c;记忆时可以此类推 一字节等于八比特 1 Byte 8 bit 1KB 1024 B 2⁰ B 1MB 1024 KB 2⁰ B 1GB 1024 MB 2⁰ B 1TB 1024 GB 2⁴⁰ B 1PB 1024 TB 2⁵⁰ B 1EB 1024 PB 2⁶⁰ B 1ZB 1024 EB 2⁷⁰ B 1YB 1024 ZB 2⁸⁰ B 1B…

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实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】

编辑距离算法其实就是&#xff0c;在规定的编辑操作(替换字符串、插入字符串、删除字符串)中&#xff0c;经过几步可以把一个字符串变成另一个字符串&#xff0c;而这个所需的步数就是你的编辑距离。 测试样例&#xff1a; str1 abc str2 yabd 表里的每一个值都代表着将s…

【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;并借此形式确定了变量…