探索MongoDB的奥秘:基本命令使用入门指南

news2024/11/25 17:31:32
😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: 探索MongoDB的奥秘:基本命令使用入门指南
⏱️ @ 创作时间: 2023年08月10日

在这里插入图片描述

目录

  • 一、MongoDB概念
    • 1、使用业务应用场景
    • 2、 使用场景选择
    • 3、简介
    • 4、体系结构
  • 二、基本命令使用
    • 1、数据库操作
    • 2、集合操作
    • 3、文档操作
      • 3.1.1.新增文档
      • 3.1.2.查询文档
      • 3.1.3.更新文档
      • 3.1.4.删除文档
      • 3.1.5.高级查询
    • 4、命令总结★

一、MongoDB概念

1、使用业务应用场景

具体的应用场景参考如下:

1)社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。

2)游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。

3)物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将

订单所有的变更读取出来。

4)物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。

5)视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

2、 使用场景选择

应用不需要事务以及复杂的 join 支持。

应用数据模型无法确定,想快速迭代开发。

应用读写的QPS高。

应用需要大数据级别数据存储。

应用需要大量的地理位置查询、文本查询(比如:日志储存)。

3、简介

MongoDB是一个开源、高性能、无模式的文档型数据库,是最像关系型数据库(MySQL)的非关系型数据库。

它支持的数据结构非常松散,是一种类似于 JSON 的格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。

MongoDB中的记录是一个文档,它是一个由字段和值对(fifield:value)组成的数据结构象,即一个文档认为就是一个对象。

字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。

具有:高性能、高可用、高拓展、无模式结构 特点

4、体系结构

在这里插入图片描述

默认情况下,mongodb有三个默认库:admin、local、config

  • admin: 这是"root"数据库,要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

二、基本命令使用

1、数据库操作

# 创建/使用数据库(如果数据库不存在,则创建数据库dbame,否则切换到指定的数据库dbname)
use 数据库名称(比如:use testdb)

# 查询所有库(新增的库,没有创建集合则不会被查询到)
show dbs

# 查看当前操作的库
db

# 删除库
use 具体数据库名
db.dropDatabase()

2、集合操作

创建集合-显示创建:

# 进入testdb数据库
use testdb
# 创建集合
db.createCollection('name');

在这里插入图片描述

查询所有集合:

show collections

在这里插入图片描述

删除集合:
为了演示删除效果,多创建几个集合,如下:
在这里插入图片描述
使用删除方法,删除名称为test1的集合,命令如下:

# db.集合名称.drop(),比如:
db.test1.drop()

效果:
在这里插入图片描述

3、文档操作

一下操作时,数据库名称为tsetdb,集合的名称为test

3.1.1.新增文档

新增文档,多个由逗号分隔 【如果当前的集合名称不存在,则会被自动创建】

测试内容:

// articleid、content、userid为文档中的字段名称
    db.test.insert([{
        "articleid":"1",
        "content":"测试内容1",
        "userid":"1"
    },{
        "articleid":"2",
        "content":"测试内容2",
        "userid":"2"
    }]);

效果:
在这里插入图片描述

3.1.2.查询文档

查询所有:

	db.test.find()

在这里插入图片描述
查询所有-指定字段:
查询所有数据,并且返回指定字段,默认会返回_id字段,0表示不返回

db.test.find({},{userid:1,content:1,_id:0})

在这里插入图片描述
指定查询-返回一条文档的所有字段:

 db.test.findOne({userid:'1'})

指定查询-返回所有文档的所有字段:

db.test.find({userid:'1'})

指定查询-返回特定字段:
查询userid为1的所有数据,并且返回指定字段,默认会返回_id字段,0表示不返回

db.test.find({userid:'1'},{userid:1,content:1,_id:0})

在这里插入图片描述

3.1.3.更新文档

1、覆盖更新:
文档只会保留更新的字段,其他字段被删除

db.test.update({userid:"1"},{content:"修改内容"});

效果:
在这里插入图片描述
2、局部更新:
通过$set指令 ,使得只有被修改的字段才进行更新

db.test.update({userid:"2"},{$set:{content:"局部更新内容"}})

在这里插入图片描述
3、批量更新:
不管是上面说到的覆盖更新还是局部更新,都只会去匹配一条数据,也就是说当更新了一条满足要求的数据后,即使还有满足要求的数据也不会进行更新,除非再次执行更新命令,显然这种是不合理的,所以需要使用到批量更新

db.test.update({userid:"1"},{$set:{content:"批量更新"}},{multi:true})

4、创建更新:
如果更新的文档值不存在,则插入文档进行新增

db.test.update({userid:"3"},{$set:{content:"创建更新"}},{upsert:true})

效果:
在这里插入图片描述

3.1.4.删除文档

删除全部文档:

db.test.remove({})

按条件删除文档:

# 比如:删除userid为1的文档数据
db.test.remove({userid:"1"})

3.1.5.高级查询

1、统计查询:

# {}表示带上条件
db.test.count() 或者 db.test.count({userid:'1'})

2、分页查询:
可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据

# 第一页,每页两条(下标值为0、1),所以skip为0
db.test.find().skip(0).limit(2)
# 第二页(下标值为2、3),所以skip为2
db.test.find().skip(2).limit(2)

效果:
在这里插入图片描述
3、排序查询:
sort() 方法对数据进行排序, 1 为升序排列, -1 是用于降序排列

db.test.find().sort({userid:-1})

4、分页排序查询:
先 sort(), 然后是 skip(),最后是显示的 limit()

db.test.find().skip(0).limit(2).sort({userid:-1})

5、正则查询:

# field表示文档中的某个字段
db.lhz.find({field:/正则表达式/})

6、比较查询:
大于-$gt、小于-$lt、大于等于-$gte、小于等于-$lte、不等于-$ne

# userid大于10
db.test.find({ "userid" : { $gt: 10 }})

7、包含查询:
包含-$in,不包含-$nin

db.test.find({userid:{$in:["1","2"]}})

8、多条件查询:
andor可以结合使用

# 且查询
db.test.find({$and:[{userid:"1"},{articleid:{$gt:1}}]})
# 或查询
db.test.find({$or:[{userid:"2"},{articleid:{$lt:1}}]})

4、命令总结★

选择切换数据库:use articledb
插入数据:db.comment.insert({bson数据})
查询所有数据:db.comment.find();
条件查询数据:db.comment.find({条件})
查询符合条件的第一条记录:db.comment.findOne({条件})
查询符合条件的前几条记录:db.comment.find({条件}).limit(条数)
查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)
修改数据:

db.comment.update({条件},{修改后的数据}) 
或	
db.comment.update({条件},{$set:{要修改部分的字段:数据})

修改数据并自增某字段值:db.comment.update({条件},{$inc:{自增的字段:步进值}})
删除数据:db.comment.remove({条件})
统计查询:db.comment.count({条件})
模糊查询:db.comment.find({字段名:/正则表达式/})
条件比较运算:db.comment.find({字段名:{$gt:值}})
包含查询:

db.comment.find({字段名:{$in:[值1,值2]}})  
或
db.comment.find({字段名:{$nin:[值1,值2]}})

条件连接查询:

db.comment.find({$and:[{条件1},{条件2}]}) 
或
db.comment.find({$or:[{条件1},{条件2}]})

在这里插入图片描述

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

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

相关文章

世界算力简史(下)

世界算力简史(上) 世界算力简史(中) 今天终于要完结了…… █ 1980-1990:PC时代 IBM-PC和“兼容机” 上一篇,我们说到,70年代微处理器崛起,使得个人电脑开始大量出现。 这种情况&…

山东布谷科技直播程序源码使用Redis进行服务器横向扩展

当今,直播程序源码平台作为新媒体时代主流,受到了世界各地人民的喜爱,这也使得直播程序源码平台用户数量的庞大,也难免会出现大量用户同时访问服务器,使服务器过载的情况,当服务器承受不住的时候&#xff0…

进程的创建

进程创建时发生了什么 回顾上节关于存储空间分配的图片: 当程序运行到 fork() 函数了之后: 在早期的Linux中,系统会将fork之前所有的数据段,代码段,堆,栈等对应的全部的存储空间拷贝一份,作为…

保姆级教程:从0到1搭建Stable Diffusion XL完整工作流进行AI绘画

Rocky Ding 公众号:WeThinkIn 写在前面 【人人都是算法专家】栏目专注于分享Rocky在AI行业中对业务/竞赛/研究/产品维度的思考与感悟。欢迎大家一起交流学习💪 大家好,我是Rocky。 之前Rocky详细介绍了Stable Diffusion(SD&#…

Scala(第一章Scala入门)

文章目录 1.1 概述 1.1.1 为什么学习Scala1.1.2 Scala发展历史1.1.3 Scala和Java关系1.1.4 Scala语言特点 1.2 Scala环境搭建1.3 Scala插件安装1.4 HelloWorld案例 1.4.1 创建IDEA项目工程1.4.2 class和object说明1.4.3 Scala程序反编译 1.5 关联Scala源码1.6官方编程指南 1.1…

Arch Linux 使用桥接模式上网

如果我们想要将虚拟机与物理主机同一网段,并且像物理机器一样被其他设备访问,则需要以桥接模式上网,这个时候,物理主机就必须配置为使用网桥上网了。 注意:这里我们使用了 NetworkManager 网络管理工具中的 nmcli 来进…

File 类和 InputStream, OutputStream 的用法总结

目录 一、File 类 1.File类属性 2.构造方法 3.普通方法 二、InputStream 1.方法 2.FileInputStream 三、OutputStream 1.方法 2.FileOutputStream 四、针对字符流对象进行读写操作 一、File 类 1.File类属性 修饰符及类型属性说明static StringpathSeparator依赖于系统的路…

【T3】金蝶kis凭证数据转换到畅捷通T3软件中。

【问题需求】 将金蝶软件中的账套转换到畅捷通T3软件中。 由于金蝶老版本使用的是非sql server数据库。 进而需要将其数据导入到sql中,在转换到T3。 【转换环境】 金蝶中数据:凭证;科目无项目核算。 1、金蝶的数据文件后缀为.AIS; 2、安装office2003全版软件; 3、安装sq…

SpringBoot3文件管理

标签:上传.下载.Excel.导入.导出; 一、简介 在项目中,文件管理是常见的复杂功能; 首先文件的类型比较多样,处理起来比较复杂,其次文件涉及大量的IO操作,容易引发内存溢出; 不同的…

Codeforces Round 890 (Div. 2) C. To Become Max(二分 补写法 二分套二分)

题目 给定一个长度为n(n<1e3)的数组&#xff0c; 在一次操作里&#xff0c;你可以选择一个满足a[i]<a[i1]的下标i(1<i<n-1)&#xff0c;对a[i]加一 问&#xff0c;你最多操作k次的情况下&#xff0c;数组的最大值是多少&#xff0c;输出最大值 思路来源 Submi…

【C++精华铺】5.C++类和对象(中)类的六个默认成员函数

目录 1. 六个默认成员函数 2. 构造函数 2.1 概念 2.2 默认构造 2.2.1 系统生成的默认构造 2.2.2 自定义默认构造函数 2.3 构造函数的重载 3. 析构函数 3.1 概念 3.2 系统生成的析构函数 3.3 自定义析构函数 4. 拷贝构造 4.1 概念 4.2 默认生成的拷贝构造&#xff08;浅…

解锁滴滴ES的性能潜力:JDK 17和ZGC的升级之路

前文介绍了滴滴自研的ES强一致性多活是如何实现的&#xff0c;其中也提到为了提升查询性能和解决查询毛刺问题&#xff0c;滴滴ES原地升级JDK17和ZGC&#xff0c;在这个过程中我们遇到了哪些问题&#xff0c;怎样解决的&#xff0c;以及最终上线效果如何&#xff0c;这篇文章就…

云计算技术——多GPU渲染的云渲染服务

多GPU渲染的云渲染服务&#xff0c;是一种利用云计算技术&#xff0c;将多个图形处理器&#xff08;GPU&#xff09;集成在一起&#xff0c;为用户提供高效、便捷、低成本的渲染解决方案的服务。本文将从多GPU渲染的概念、优势、应用场景&#xff0c;云渲染服务的特点、优势&am…

【C++】初阶 --- 内联函数(inline)

文章目录 &#x1f95e;内联函数&#x1f35f;1、C语言实现"宏函数"&#x1f35f;2、内联函数的概念&#x1f35f;3、内联函数的特性&#x1f35f;4、总结 &#x1f95e;内联函数 &#x1f35f;1、C语言实现"宏函数" &#x1f970;用C语言先来实现普通的…

并发——volatile 关键字

文章目录 1. CPU 缓存模型2. 讲一下 JMM(Java 内存模型)3. 并发编程的三个重要特性4. 说说 synchronized 关键字和 volatile 关键字的区别 我们先要从 CPU 缓存模型 说起&#xff01; 1. CPU 缓存模型 为什么要弄一个 CPU 高速缓存呢&#xff1f; 类比我们开发网站后台系统使…

分布式 - 服务器Nginx:一小时入门系列之静态网页配置

文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统&#xff1a; [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…

flutter项目给安卓打正式包 和升级版本号

1.首先把flutter项目里的android目录整个拖进android studo里,运行一下看看是否能运行 2.Build->Generate Signed Bundle/APK… 点击APK->Next 如果没有key酒店及Create new…就生成新的key 点击Key store path:右边的图标选择保存路径 选择保存的路径,并且在Save…

【雕爷学编程】Arduino动手做(01)---干簧管传感器模块4

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

logo一键生成的操作,没有设计经验也无妨

您可能会担心&#xff0c;没有设计经验如何设计一个独特而专业的标志&#xff08;Logo&#xff09;。但是&#xff0c;随着技术的进步&#xff0c;现在有许多一键生成操作的设计工具可供使用&#xff0c;使人们更容易创建自己的Logo。 什么是一键生成操作&#xff1f; 一键生成…

若依vue -【 100 ~ 更 】

100 主子表代码生成详解 1 新建数据库表结构&#xff08;主子表&#xff09; -- ---------------------------- -- 客户表 -- ---------------------------- drop table if exists sys_customer; create table sys_customer (customer_id bigint(20) not null…