万泉河网站建设/找一个免费域名的网站
MongoDB,作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询,从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。
目录
1. 引言
MongoDB简介
MongoDB的优势和应用场景
2. 基础篇
安装和配置MongoDB
MongoDB基本概念
使用MongoDB Shell
3. 数据库操作
创建和删除数据库
切换数据库
查看当前数据库状态
4. 集合操作
创建集合与设置选项
列出所有集合
删除集合
5. 文档操作
插入文档
查询文档
更新文档
删除文档
6. 高级查询
比较操作符
逻辑操作符
数组操作符
7. 索引管理
创建索引
管理和优化索引
8. 聚合与分析
聚合操作简介
聚合管道
9. 备份与恢复
备份数据的重要性
使用mongodump和mongorestore
10. 数据导入导出
使用mongoimport和mongoexport
11. 安全与权限管理
配置访问控制
用户和角色管理
MongoDB常用命令大全
查询操作
1. 引言
MongoDB简介
MongoDB是一种面向文档的NoSQL数据库,由于其高性能、高可用性和易扩展性,它已经成为了大数据和实时Web应用的热门选择。与传统的表格型数据库不同,MongoDB使用文档(通常是JSON样式)来存储数据,这使得数据的存储更加灵活和直观。
MongoDB的优势和应用场景
MongoDB的主要优势包括其模式自由的文档模型、强大的查询语言、高性能、高可用的复制特性以及水平扩展能力。它广泛应用于内容管理、移动和社交应用、实时分析等多个领域。
2. 基础篇
安装和配置MongoDB
MongoDB的安装相对简单,可以从MongoDB官网下载对应操作系统的安装包进行安装。对于大多数开发者来说,推荐使用默认配置即可开始。在安装完成后,你可以通过启动mongod
进程来运行MongoDB服务器。
MongoDB基本概念
- 数据库(Database):数据库是存储集合的物理容器。一个MongoDB实例可以承载多个数据库。
- 集合(Collection):集合类似于传统数据库中的表,是存储文档的地方。一个集合中的文档可以有不同的字段,但通常都是为了同一目的或主题而收集的。
- 文档(Document):文档是MongoDB中数据的基本单位,类似于JSON对象,具有键值对的结构。
使用MongoDB Shell
MongoDB Shell是一个交互式JavaScript接口,用于操作MongoDB。通过Shell,你可以执行查询、更新数据、管理数据库操作等。例如,使用show dbs
命令可以列出所有数据库。
3. 数据库操作
创建和删除数据库
要创建一个数据库,首先使用use <database_name>
命令切换到该数据库。如果数据库不存在,MongoDB会在你第一次向其中写入数据时自动创建它。
删除数据库使用db.dropDatabase()
命令,在执行之前确保你在正确的数据库上下文中。
切换数据库
使用use <database_name>
命令可以切换当前的数据库上下文到指定的数据库。
查看当前数据库状态
db.stats()
命令可以显示当前数据库的状态信息,如数据大小、集合数量等。
4. 集合操作
MongoDB中的集合类似于传统关系数据库中的表,但它不需要定义固定的表结构,这使得MongoDB非常灵活。
创建集合与设置选项
创建集合可以使用db.createCollection(name, options)
命令,其中name
是你想要创建的集合名称,options
是一个文档,用来指定集合的配置。例如,以下命令创建一个名为myCollection
的集合,具有最大文档数限制和最大存储空间限制:
db.createCollection("myCollection", { capped : true, size : 5242880, max : 5000 } )
这里,capped
表示创建一个固定大小的集合,size
指定最大大小,max
指定最大文档数量。
列出所有集合
要查看数据库中所有的集合,可以使用show collections
命令。这个命令会列出当前数据库中所有集合的名称。
删除集合
如果你需要删除一个集合及其所有数据,可以使用db.<collection>.drop()
命令。例如,要删除myCollection
集合:
db.myCollection.drop()
5. 文档操作
文档是MongoDB中存储数据的基本单位,类似于JSON对象的结构。
插入文档
-
插入单个文档:使用
db.<collection>.insertOne(document)
命令,如:db.myCollection.insertOne({ name: "John", age: 30, city: "New York" })
-
插入多个文档:使用
db.<collection>.insertMany([documents])
命令,如:db.myCollection.insertMany([{ name: "Jane", age: 25, city: "Paris" }, { name: "Mike", age: 28, city: "London" }])
查询文档
-
查找所有文档:
db.<collection>.find()
会返回集合中的所有文档。 -
条件查询:你可以传递一个查询文档来指定查询条件,例如查找所有年龄大于25的文档:
db.myCollection.find({ age: { $gt: 25 } })
-
限制返回字段:使用第二个参数来限制返回的字段,例如只返回
name
和city
字段:db.myCollection.find({}, { name: 1, city: 1 })
更新文档
-
更新单个文档:
db.<collection>.updateOne(filter, update, options)
命令用于更新一个符合条件的文档。例如,更新第一个名字为"John"的文档:db.myCollection.updateOne({ name: "John" }, { $set: { age: 31 } })
-
更新多个文档:使用
db.<collection>.updateMany(filter, update, options)
命令可以更新所有符合条件的文档。例如,将所有位于"New York"的文档的city
字段更新为"Brooklyn":db.myCollection.updateMany({ city: "New York" }, { $set: { city: "Brooklyn" } })
删除文档
- 删除单个文档:
db.<collection>.deleteOne(filter)
命令删除第一个符合条件的文档。 - 删除多个文档:
db.<collection>.deleteMany(filter)
命令删除所有符合条件的文档。
6. 高级查询
MongoDB提供了强大的查询能力,可以使用各种操作符来执行复杂的查询,包括比较、逻辑、数组等操作符。
比较操作符
比较操作符允许进行数值比较,常用的包括$gt
(大于)、$lt
(小于)、$gte
(大于等于)、$lte
(小于等于) 等。例如,查询年龄在25到30岁之间的文档:
db.myCollection.find({ age: { $gte: 25, $lte: 30 } })
逻辑操作符
逻辑操作符用于组合多个查询条件,常见的逻辑操作符有$and
、$or
、$not
、$nor
。例如,查询年龄大于30或住在"New York"的文档:
db.myCollection.find({ $or: [{ age: { $gt: 30 } }, { city: "New York" }] })
数组操作符
数组操作符可以查询数组类型的字段,如$in
、$all
等。例如,查询拥有"reading"和"traveling"爱好的文档:
db.myCollection.find({ hobbies: { $all: ["reading", "traveling"] } })
7. 索引管理
索引对于提高MongoDB的查询性能至关重要。正确使用索引可以大幅度提高数据检索的速度。
创建索引
使用db.<collection>.createIndex(keys, options)
命令创建索引,其中keys
指定了索引字段和索引类型(如升序1
或降序-1
),options
可以指定索引的额外属性。例如,为myCollection
的city
字段创建一个升序索引:
db.myCollection.createIndex({ city: 1 })
管理和优化索引
你可以使用db.<collection>.getIndexes()
查看集合的所有索引,使用db.<collection>.dropIndex(index)
删除无用或过时的索引。正确管理索引对维护查询性能和存储效率非常重要。
8. 聚合与分析
聚合操作允许对数据集进行复杂的转换和计算,MongoDB的聚合框架提供了强大的数据处理能力。
聚合操作简介
聚合操作通常涉及多个阶段,每个阶段对数据进行转换,如过滤、分组、排序等。使用db.<collection>.aggregate([pipeline])
进行聚合查询,其中pipeline
是一个包含各个阶段的数组。
聚合管道
聚合管道的常见操作包括$match
(过滤文档)、$group
(按某些字段分组)、$sort
(排序)、$limit
(限制结果数量)等。例如,下面的聚合查询按城市分组,计算每个城市的平均年龄:
db.myCollection.aggregate([ { $group: { _id: "$city", averageAge: { $avg: "$age" } } }, { $sort: { averageAge: -1 } } ])
9. 备份与恢复
在数据库管理中,定期备份数据是非常重要的,以确保数据的安全和可恢复性。
备份数据的重要性
定期备份可以保护数据免受硬件故障、数据损坏、操作错误等风险的影响。
使用mongodump和mongorestore
-
mongodump:这是MongoDB提供的一个备份工具,可以导出所有数据库数据到BSON文件中。使用方法如下:
mongodump --db <database_name> --out <backup_directory>
这会将指定数据库的备份保存在指定的目录中。
-
mongorestore:与mongodump相对应,这个工具用于恢复由mongodump导出的数据。使用方法如下:
mongorestore --db <database_name> <backup_directory>
这会从指定目录中的备份文件恢复数据库。
10. 数据导入导出
MongoDB提供了工具来帮助用户导入和导出数据,这对于数据迁移和备份非常有用。
使用mongoimport和mongoexport
-
mongoimport:这个工具用于将JSON、CSV或TSV格式的数据导入到MongoDB集合中。例如,导入JSON文件到指定集合:
mongoimport --db <database_name> --collection <collection_name> --file <file_name>.json
-
mongoexport:与mongoimport相对应,这个工具用于将数据从MongoDB集合导出到JSON或CSV格式的文件中。例如,导出集合数据到JSON文件:
mongoexport --db <database_name> --collection <collection_name> --out <output_file_name>.json
11. 安全与权限管理
在公开或敏感的应用环境中,确保数据库的安全是非常重要的。
配置访问控制
启用访问控制来限制对MongoDB数据的访问。通过创建用户账号和角色,为每个用户分配适当的权限。
用户和角色管理
-
创建用户:可以使用
db.createUser()
命令创建新用户,并为其指定角色。例如:
db.createUser({user: "myUser",pwd: "myPassword",roles: [ { role: "readWrite", db: "myDatabase" } ]
})
MongoDB常用命令大全
# 显示所有数据库
show dbs# 切换到指定数据库(不存在则创建)
use <database_name># 显示当前数据库中的所有集合
show collections# 删除当前数据库
db.dropDatabase()# 创建集合
db.createCollection("<collection_name>", options)# 删除集合
db.<collection_name>.drop()# 插入单个文档
db.<collection_name>.insertOne({<document>})# 插入多个文档
db.<collection_name>.insertMany([{<document1>}, {<document2>}, ...])# 查询所有文档
db.<collection_name>.find()# 查询符合条件的文档
db.<collection_name>.find({<query>})# 更新符合条件的第一个文档
db.<collection_name>.updateOne({<query>}, {$set: {<update>}})# 更新所有符合条件的文档
db.<collection_name>.updateMany({<query>}, {$set: {<update>}})# 替换一个文档
db.<collection_name>.replaceOne({<query>}, {<newDocument>})# 删除符合条件的第一个文档
db.<collection_name>.deleteOne({<query>})# 删除所有符合条件的文档
db.<collection_name>.deleteMany({<query>})# 创建索引
db.<collection_name>.createIndex({<field>: <direction>})# 列出所有索引
db.<collection_name>.getIndexes()# 删除索引
db.<collection_name>.dropIndex("<index_name>")# 执行聚合管道
db.<collection_name>.aggregate([{<stage1>}, {<stage2>}, ...])# 备份数据库
mongodump --db <database_name> --out <destination_directory># 恢复数据库
mongorestore --db <database_name> <path_to_backup># 导入数据
mongoimport --db <database_name> --collection <collection_name> --file <input_file># 导出数据
mongoexport --db <database_name> --collection <collection_name> --out <output_file># 创建用户
db.createUser({user: "<username>", pwd: "<password>", roles: [{role: "<role>", db: "<database_name>"}]})# 删除用户
db.dropUser("<username>")# 更新用户权限
db.updateUser("<username>", {roles: [{role: "<new_role>", db: "<database_name>"}]})# 查看服务器状态
db.serverStatus()# 查看当前操作
db.currentOp()# 杀掉指定操作
db.killOp(<opid>)# 数据库修复和压缩
db.repairDatabase()# 查看集合的统计信息
db.<collection_name>.stats()# 重命名集合
db.<collection_name>.renameCollection("<new_collection_name>")# 限制查询结果数量
db.<collection_name>.find().limit(<number>)# 跳过指定数量的文档
db.<collection_name>.find().skip(<number>)# 对查询结果排序
db.<collection_name>.find().sort({<field>: <direction>})
查询操作
// 查询集合中的所有文档
db.<collection>.find()// 查询符合条件的文档
db.<collection>.find({<field>: <value>})// 使用比较操作符进行查询(例如:$gt, $lt, $eq, $ne等)
db.<collection>.find({<field>: {$gt: <value>}})// 查询指定字段包含某个值的文档(数组字段)
db.<collection>.find({<arrayField>: <value>})// 查询指定字段包含数组中所有值的文档
db.<collection>.find({<arrayField>: {$all: [<value1>, <value2>, ...]}})// 使用逻辑操作符进行查询($and, $or, $not, $nor)
db.<collection>.find({$or: [{<field1>: <value1>}, {<field2>: <value2>}]})// 使用$in操作符查询字段值在指定数组内的文档
db.<collection>.find({<field>: {$in: [<value1>, <value2>, ...]}})// 查询文档中存在指定字段的文档
db.<collection>.find({<field>: {$exists: true}})// 使用正则表达式进行查询
db.<collection>.find({<field>: {$regex: <pattern>}})// 限制查询结果数量
db.<collection>.find().limit(<number>)// 跳过指定数量的查询结果
db.<collection>.find().skip(<number>)// 对查询结果进行排序(1为升序,-1为降序)
db.<collection>.find().sort({<field>: 1})// 计算符合查询条件的文档数量
db.<collection>.find({<condition>}).count()// 在查询中使用投影,限制返回的字段
db.<collection>.find({<condition>}, {<field1>: 1, <field2>: 1})// 使用聚合管道进行复杂查询
db.<collection>.aggregate([{ $match: {<condition>} },{ $group: {_id: "$<field>", count: {$sum: 1}} },{ $sort: {count: -1} }
])// 使用$lookup进行集合间的连接查询
db.<collection>.aggregate([{ $lookup: {from: "<otherCollection>",localField: "<localField>",foreignField: "<foreignField>",as: "<outputArrayField>"} }
])
相关文章:

MongoDB从0到1:高效数据使用方法
MongoDB,作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询,从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。 目录 1. 引言 MongoDB简介 MongoDB的优势和应用场景 2. 基础篇 安装和配置MongoDB MongoDB基本概念 使…...

Go——运算符,变量和常量,基本类型
一.运算符 Go语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意:(自增)和--(自减)在go语言中是单独的语句,并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…...

js使用canvas实现图片鼠标滚轮放大缩小拖拽预览,显示像素坐标,显示像素值
html代码 todo 实现画矩形框,圆形roi <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title&…...

ArrayList 源码解析和设计思路
ArrayList 一、继承体系二、接口继承三、标记接口四、设计目的五、框架总体结构六、工作原理七、创建List对象初始化?还是add()添加元素初始化?七、add(E e)添加元素八、remove(int index)删除元素八、线程安全问题 一、继承体系 ArrayLis…...

Win10系统使用IIS服务搭建WebDAV网站结合内网穿透公网访问本地文件
文章目录 推荐1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结: 推荐 前些天发现了一个巨牛的人工智能…...

AWTK 开源串口屏的配置文件
配置文件 每个 HMI 应用程序都需要一个配置文件,用于配置 HMI 的基本信息、服务、持久化、告警信息、历史数据等。 文件位置 design/default/data/settings.json基本配置 name - 名称(必须配置,只能用字母、数字、下划线) se…...

Spring、SpringMVC、Spring Boot常见注解有哪些?不要混淆了哦
Spring、SpringMVC、Spring Boot常见注解 一、Spring 注解说明Component、Controller、Service、Repository使用在类上用于实例化BeanAutowired使用在字段上用于根据类型依赖注入Qualifier结合Autowired一起使用用于根据名称进行依赖注入Scope标注Bean的作用范围Configuratio…...

在notion里面实现四象限清单
四象限清单是一种时间管理工具,旨在帮助人们根据任务的重要性和紧急性来优先排序他们的工作。这个概念最早由德怀特艾森豪威尔提出,后来又被史蒂芬柯维在他的著作《高效能人士的七个习惯》中进一步普及。四象限清单将任务分为四个类别: 第一…...

【linux】搜索所有目录和子目录下的包含.git的文件并删除
一、linux命令搜索所有目录和子目录下的包含.git的文件 在Linux系统中,要搜索所有目录和子目录下的包含.git的文件,可以使用find命令。find命令允许指定路径、表达式和操作来查找文件。 以下是使用find命令搜索包含.git的文件的方法: 1. 基…...

三、传输层拥塞控制、差错控制
3.1 概述和传输层服务 传输服务和协议: 为运行在不同主机上的应用进程提供逻辑通信; 传输协议运行在端系统-发送方:将应用层的报文分成报文段,然后传递给网络层;接收方:将报文段重组成报文,然后传递给应用…...

主流电商平台数据大规模数据采集接口的实现:电商API接口接入方案和电商数据采集现状
现实问题 1、您是否需要经常统计关注的品牌、产品、平台、卖家的电商数据,包括销量、评价量、收藏量、预售量、运费、赠品和促销信息,手头上没有稳定的数据源? 2、您是否经常需要统计授权卖家和非授权卖家的销售、动销占比,分析…...

Python电梯楼层数字识别
程序示例精选 Python电梯楼层数字识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《Python电梯楼层数字识别》编写代码,代码整洁,规则,易读。 学习与应…...

Linux学习:基础开发工具的使用(1)
目录 1. Linux软件包管理器:yum工具1.1 yum是什么(软件商城)1.2 yum的使用1.3 yum的背景生态 2. 项目开发与集成开发环境3. vim编辑器3.1 vim编辑器的常见模式与模式切换3.3 vim编辑器的使用3.3.1 命令模式下的常见命令:3.3.2 vim…...

在idea中配置tomcat服务器,然后部署一个项日
1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完,解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建,变量名输入:CATALINA_HOME,变量值就是Tomcat的安装路径&#x…...

C语言例:设 int a=11; 则表达式 a+=a-=a*a 的值
注:软件为VC6.0 代码如下: #include<stdio.h> int main(void) {int a11, b;b (aa-a*a); //a*a121 -->a-121结果为a-110 -->a-110结果为a-220printf("表达式aa-a*a 的值为: %d\n",b);return 0; } //优先级&#x…...

C++ 中的虚函数和多态性
C 是一种高级编程语言,它具有面向对象编程的特性。在 C 中,虚函数和多态性是非常重要的概念,它们使得继承关系更加灵活和强大。 虚函数是在基类中声明为虚函数的成员函数,其作用是在运行时动态绑定函数的调用。当在派生类中重写基…...

叶顺舟:手机SoC音频趋势洞察与端侧AI技术探讨 | 演讲嘉宾公布
后续将陆续揭秘更多演讲嘉宾! 请持续关注! 2024中国国际音频产业大会(GAS)将于2024年3.27 - 28日在上海张江科学会堂举办。大会将以“音无界,未来(Audio, Future)”为主题。大会由中国电子音响行业协会、上…...

SpringBoot之yml与properties配置文件格式的区别
概念: SpringBoot支持两种格式的配置文件,一种是yml,而另一种就是properties,默认的文件名为application.yml或者.properties 为什么有了properties之后还要有yml呢? 因为properties配置文件存在数据冗余性,在properties配置文件中一切配置都需要从头写到为, 并且Key不能重复,…...

【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉树剪枝
本专栏内容为:递归,搜索与回溯算法专栏。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:递归搜索回溯专栏 🚚代码仓库:小小unicorn的代…...

Django实现登录注册
Django实现登录注册 目录 Django实现登录注册配置路由首页注册前端:后端: 登录前端:后端:验证码部分逻辑 配置路由 首先分发路由[User,Blog,Article] from django.contrib import admin from django.urls import path from Blog…...

Python实战:NumPy数组与矩阵操作入门
NumPy是Python数据科学领域中不可或缺的库之一,它提供了一个强大的N维数组对象和一系列用于操作这些数组的函数。本文将详细介绍NumPy数组与矩阵的基础知识,包括数组的创建、操作、切片、索引、以及矩阵的运算等。 1. 引言 在Python数据科学领域&#…...

2024.2.26校招 实习 内推 面经
绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招&实习 |美团2024年春季校园招聘全球启动(内推) 校招&实习 |美团2024年春季校园招聘全球启动(内推) 2、校招 | 江淮汽车2024…...

cannot find -xml2: No such file or directory的解决方法
一,问题现象 在编译库的时候出现如下图所示的报错:C:/msys64/mingw32/bin/…/lib/gcc/i686-w64-mingw32/13.2.0/…/…/…/…/i686-w64-mingw32/bin/ld.exe: ca nnot find -lxml2: No such file or directory collect2.exe: error: ld returned 1 exit s…...

linux下的进程间通信
转自http://blog.csdn.net/eroswang/article/details/1772350 详细的讲述进程间通信在这里绝对是不可能的事情,而且笔者很难有信心说自己对这一部分内容的认识达到了什么样的地步,所以在这一节的开头首先向大家推荐著 名作者Richard Stevens的著名作品&a…...

基于单片机的IC 卡门禁系统设计
摘要:针对传统门锁钥匙易丢失、配置不便和忘记携带等问题,提出了一种基于STC89C52 的IC 卡门禁系统设计。该系统以STC89C52 单片机为核心来控制电子锁模块的开关。主要过程是由RFID 模块读取IC卡ID 并通过串口发送至STC89C52 单片机模块,STC89C52 单片机模块可以实现在线对I…...

【爬虫介绍】了解爬虫的魅力
爬虫 爬虫(Spider)是一种自动化程序,通过模拟人的行为,在互联网上收集、抓取和提取信息。爬虫通常用于网站数据抓取、搜索引擎索引、数据分析和挖掘等领域。 爬虫可以自动访问网页,按照预定的规则抓取网页上的文本、…...

Xcode 15.3 Archive失败
Xcode 15.3 Archive失败 背景 升级 Xcode 到 15.3,真机运行正常。打包的时候发现 Archive 失败。 提示: Call parameter type does not match function signature! 仔细看报错里是和HandyJSON相关的提示。 解决 起初以为和 Pod 库有关系,…...

Hadoop学习3:问题解决
文章目录 问题解决1. ERROR: but there is no HDFS_NAMENODE_USER defined2. JAVA_HOME is not set and could not be found.3. Hadoop-DFS页面访问不了4. namenode格式化失败,或者dfs页面打开失败5. ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Ab…...

HarmonyOS鸿蒙开发常用4种布局详细说明
介绍一下鸿蒙开发常用4种布局 1、线性布局 2、层叠布局 3、网格布局 4、列表布局 1. 线性布局(Column/Row) 线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row(行)和Column&…...

Python中的变量是什么类型?
一、 Python中的变量是什么类型? 在Python中,变量本身是没有类型的,变量可以指向任何类型的数据对象。这意味着你可以将一个整数赋值给一个变量,稍后又可以将一个字符串赋值给同一个变量。Python是一种动态类型语言,它…...