热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB常用命令总结及安装介绍

@目录MongoDB介绍MongoDB安装在线安装离线安装启动MongoDB命令行启动配置文件启动停止MongoDB访问MongoDB数据库命令用户管理角色管理安全认证集合文档索引

文章目录[隐藏]

  • MongoDB介绍
  • MongoDB安装
    • 在线安装
    • 离线安装
  • 启动MongoDB
    • 命令行启动
    • 配置文件启动
  • 停止MongoDB
  • 访问MongoDB
    • 数据库命令
      • 用户管理
      • 角色管理
      • 安全认证
      • 集合
      • 文档
      • 索引
      • 使用SQL查询
      • 备份/恢复
      • 导入/导出


@

目录

  • MongoDB介绍
  • MongoDB安装
    • 在线安装
    • 离线安装
  • 启动MongoDB
    • 命令行启动
    • 配置文件启动
  • 停止MongoDB
  • 访问MongoDB
    • 数据库命令
      • 用户管理
      • 角色管理
      • 安全认证
      • 集合
      • 文档
      • 索引
      • 使用SQL查询
      • 备份/恢复
      • 导入/导出

MongoDB介绍

MongoDB是免费开源的跨平台NoSQL数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,它支持的数据结构非常松散,是类似JSON的二进制形式的存储格式,称为BSON,和JSON一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型

MongoDB与关系型数据库类似

SQL MongoDB 说明
数据库(database) 数据库(database) 最外层概念,可理解为小区的名字,小区内包含很多栋楼(集合)
表(table) 集合(collection) 可理解为小区中的每栋楼,一栋楼包含很多房间(文档)
行(row) 文档(document) 可理解为屋子中的各个房间(具体数据),并非通常理解的PDF、Word等文档
列(column) 字段(field) 可理解为各个房间的名称
索引(index) 索引(index) 独立的检索式数据结构,可理解为如何查找各个房间
主键(primary key) _id(字段) 各个文档中多有唯一的_id字段,可理解为各个房间的编号
表连接(join,……) 聚合操作($lookup,……) 对集合中的文档进行各类操作,可理解为对各栋楼中的房间进行分组、排序等

MongoDB安装

安装环境:

  • 操作系统:CentOS 8.3
  • MongoDB版本:6.0.0

进入MongoDB社区版下载页面,选择版本、平台及包格式后下载,可点击【Copy Link】复制链接后用wget命令在线下载安装包

MongoDB常用命令总结及安装介绍

在线安装

wget https://repo.mongodb.org/yum/redhat/8/mongodb-org/6.0/x86_64/RPMS/mongodb-org-server-6.0.0-1.el8.x86_64.rpm	# 下载
rpm -ivh mongodb-org-server-6.0.0-1.el8.x86_64.rpm	# 安装

此方式可以直接使用命令systemctl start/status/stop/restart/enable/disble mongod.service等管理MongoDB状态

允许远程连接,需在/etc/mongod.conf文件中将第29行bindIp设置为要连接的IP地址,或者允许所有人连接,改为0.0.0.0

也可是使用下文离线安装中介绍的方式管理MongoDB状态,注意:使用离线模式启动后再使用systemctl命令会报错,后续只能使用mongod命令管理状态

离线安装

下载MongoDB时,选择tgz格式的包,上传到服务器,然后执行以下命令

tar -zxf mongodb-linux-x86_64-rhel80-6.0.0.tgz			# 解压
mv mongodb-linux-x86_64-rhel80-6.0.0 /usr/local/mongodb	# 移动到/usr/local/目录并重命名为mongodb
cd /usr/local/mongodb	# 进入mongodb目录
mkdir -p data/db		# 创建data/db目录,在db中存放数据文件
mkdir logs && cd logs && touch mongodb.log && cd ..		# 创建logs目录并在此目录下创建mongodb.log文件,然后返回

启动MongoDB

命令行启动

bin/mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --bind_ip 0.0.0.0 --fork
  • --dbpath:指定数据文件的存放目录

  • --logpath:指定日志文件

  • --logappend:使用追加方式记录日志

  • --port:指定端口,默认是27017

  • --bind_ip:绑定访问IP,默认只能本机访问

  • --fork:后台方式运行,无此参数则前台运行

  • --auth:以安全认证的方式启动,访问数据库前需完成身份认证

更多参数请使用bin/mongod -h查看帮助

配置文件启动

因为命令太长,所以可以改为配置文件的方式启动,创建文件并根据需要将参数写入文件中,比如:在etc目录下创建文件vim /etc/mongodb.conf,并输入以下内容,说明:文件具体参数信息请根据实际所需进行修改,另:使用配置文件启动时后面仍可继续跟其它参数

dbpath=/usr/local/mongodb/data/db			# 数据文件存放目录
logpath=/usr/local/mongodb/logs/mongodb.log	# 日志文件存放目录
bind_ip=0.0.0.0		# 不限制访问IP,允许所有人连接
port=27017			# 使用默认端口
logappend=True		# 以追加方式记录日志
fork=True			# 后台守护进程方式运行
bin/mongod -f /etc/mongodb.conf # 启动MongoDB服务

环境配置

因为每次都要进入MongoDB安装目录才能执行命令,所以可将安装路径配置到环境变量中,打开配置文件vim /etc/profile,添加以下信息

export MONGODB_HOME=/usr/local/mongodb	# 根据实际安装路径修改
export PATH=$PATH:$MONGODB_HOME/bin

重新加载环境变量source /etc/profile后,就可以直接使用命令啦

停止MongoDB

在命令后加参数--shutdown,如mongod -f /etc/mongodb.conf --shutdown

进入数据库后关闭,命令为db.shutdownServer()db.adminCommand({ shutdown: 1 })

访问MongoDB

命令访问

此方式需要安装基于Javascript开发的MongoDB Shell工具,Linux系统下载对应版本的rpm包,安装后即可使用,Windows系统下载后可以将bin目录路径配置到环境变量中,否则只能在安装目录运行,默认连接本地MongoDB,可以使用参数连接其它数据库,如下所示:

mongosh -u dyd -p 123456 --port 27017 --host 192.166.66.24 admin	# 带身份认证信息连接指定数据库

MongoDB Shell常用命令

命令 解释说明
db.auth() 使用账号密码完成身份认证
db.version() 查看数据库版本
db.help() 查看当前数据库支持的方法
use 数据库名 切换数据库,若不存在则创建数据库
db.createCollection() 创建集合
show tables 查看当前数据库集合列表
db.集合名.insertOne() 插入单条文档
db.集合名.insertMany() 插入多条文档
db.集合名.updateOne() 更新单条文档,还可使用replaceOne更新单条数据
db.集合名.updateMany() 更新多条文档
db.集合名.deleteOne() 删除单条文档
db.集合名.deleteMany() 删除多条文档
db.集合名.find() 查询集合内容,无查询条件则显示全部
db.集合名.countDocuments() 统计文档条目,无查询条件时统计全部数据
db.集合名.stats() 查看集合详情
db.集合名.drop() 删除集合
show users 查看当前数据库所有用户
show roles 查看当前数据库所有角色
load("***.js") 执行一个Javascript脚本文件
db.runCommand({}) 在当前数据库运行命令
db.adminCommand({}) 在admin数据库运行命令
db.dropDatabase() 删除数据库
exit 退出当前Shell

可视化工具

工具有很多,比如:Studio 3T、Navicat、MongoDB Compass等,就不多做介绍啦

数据库命令

以下介绍为常用命令,更多命令请查看官方文档

用户管理

首先以普通方式启动MongoDB

mongod -f /etc/mongod.conf
  1. 创建用户

    use admin		# 切换到admin库中
    db.createUser({	# 创建名为dyd的用户,赋予admin库超级管理员权限
        user: "dyd",
        pwd: passwordPrompt(), # 提示输入密码,历史命令中不会显示设定的密码
        roles: [{role: "root",db: "admin"}]})
    

    或者不切换数据库,使用db.runCommand()命令创建用户

    db.adminCommand({	# 创建名为myTest的用户,赋予local库可读写权限,admin库只读权限
        createUser: "myTest",
        pwd: "123456",   # 直接明文设定密码
        roles: [ { role: "readWriteAnyDatabase", db: "admin" },{ role: "read", db: "local" } ]})
    
  2. 更新用户

    db.runCommand({	# 更新用户信息
         updateUser: "dyd",
         pwd: passwordPrompt(),
         roles: [
           { role: "read", db: "admin" },{ role: "readWrite", db: "test" }],
         comment: "更新了用户密码、数据库角色权限"
       })
    
  3. 获取用户信息

    db.getUser("dyd")	# 查找用户
    db.runCommand({usersInfo:  { user: "dyd", db: "admin" },showPrivileges: true})	# 获取指定用户信息
    show users	# 查看当前数据库中所有用户
    
  4. 赋予用户角色及其权限

    db.runCommand({		# 给当前数据库中的用户添加权限
    	grantRolesToUser: "dyd",
      roles: ["userAdmin","dbAdmin"],
      comment: "给dyd用户多加两个角色"
    })
    
  5. 撤销用户绑定的角色及其权限

    db.adminCommand({ 	# 因为readWriteAnyDatabase角色必须在admin库下操作,所以命令使用adminCommand()
    	grantRolesToUser: "myTest",
      roles: [{ role: "readWriteAnyDatabase", db: "admin" },{ role: "read", db: "local" }],
      comment: "撤销dyd用户的两个角色"
    })
    
  6. 修改用户密码

    db.changeUserPassword("dyd", "654321")
    
  7. 删除用户

    db.dropUser("admin")
    
角色管理

以下为常用内置角色,也可以自定义角色,更多角色介绍及操作请查看官方介绍

内置角色 权限说明
read 允许读取指定数据库
readWrite 允许读写指定数据库
dbAdmin 允许在指定数据库中执行管理函数,如访问system.profile资源,创建、查看、删除集合等
userAdmin 允许在指定数据库中创建、查看、删除用户和角色等
dbOwner 赋予用户当前数据库的所有者权限,此角色集合了readWrite、dbAdmin和userAdmin角色的权限
clusterAdmin 集群管理权限,此角色集合了clusterManager、clusterMonitor、hostManager以及dropDatabase角色的权限,必须在admin数据库下操作
readAnyDatabase 允许用户读取所有数据库,必须在admin数据库下操作
readWriteAnyDatabase 允许用户读写所有数据库,必须在admin数据库下操作
userAdminAnyDatabase 赋予用户对所有数据库的userAdmin角色中的权限,必须在admin数据库下操作
dbAdminAnyDatabase 赋予用户对所有数据库的dbAdmin角色中的权限,必须在admin数据库下操作
root 超级管理权限,必须在admin数据库下操作
  1. 赋予用户角色

    # 赋予dyd用户对admin库的userAdminAnyDatabase角色
    db.grantRolesToUser("dyd",[{ role: "userAdminAnyDatabase", db: "admin"}])
    
  2. 撤销用户角色

    # 撤销dyd用户对admin库的root角色
    db.revokeRolesFromUser("dyd",[{ role: "root", db: "admin"}])
    
  3. 获取角色信息

    db.getRole("read",{showPrivileges: true})	# 查找角色及对应权限
    db.runCommand({ rolesInfo: "read" })		# 获取当前数据库使用的角色
    db.runCommand({ rolesInfo: { role: "read", db: "test" } })	# 获取指定数据库使用read的角色
    db.runCommand({ rolesInfo: [{ role: "read", db: "test" },{ role: "readWrite", db: "admin" }]})	# 多个角色信息
    
安全认证

以安全认证方式启动MongoDB

mongod -f /etc/mongod.conf --shutdown	# 先停止MongoDB服务
mongod -f /etc/mongod.conf --auth		# 以安全认证的方式启动,访问数据库需要身份认证

认证方式有两种

  1. 带认证信息连接对应数据库,认证信息不正确,或数据库和认证信息不对应,都会报MongoServerError: Authentication failed.

    mongosh -u dyd -p 123456 --port 27017 --host 192.166.66.24 admin	# 带身份认证信息连接指定数据库
    
  2. 先连接默认数据库,再进行认证后切换到有权操作的数据库

    mongosh --port 27017 --host 192.166.66.24	# 连接默认数据库test
    

    完成身份认证

    db.auth("myTest", "123456")	# 进行身份认证,成功则返回1
    

退出认证

db.logout()	# 退出身份认证
db.runCommand({logout:1})	# 或者使用命令

MongoDB以认证方式运行时各类操作都需要相应权限,可能会经常出现MongoServerError: command usersInfo requires authenticationAuthentication failed,所以操作前请确认当前用户所拥有的权限

集合
  1. 创建集合

    db.createCollection("dydCL")	# 创建名为dydCL的集合
    db.createCollection("dydCL",{capped:true,size:1024},{max:100})	# 创建固定大小的集合,且最多可包含100条数据
    

    当集合不存在时,直接插入数据也会创建集合

    db.ydCL.insertOne({name:"dyd",age:18})	# ydCL集合不存在,插入数据时会先自动创建ydCL集合
    
  2. 删除集合

    db.ydCL.drop()	# 删除名为ydCL的集合
    
文档
  1. 插入文档

    db.ydCL.insertOne({name:"dyd",age:18})	# 直接在ydCL集合中插入一条数据
    db.ydCL.insertMany([{name:"dyd1",age:19},{name:"dyd2",age:20}])	# 直接在ydCL集合中插入两条数据
    

    准备如下两条数据

    data0 = {"_id":1,name:"test",age:21,"hobbies":["旅游","游戏"],"skills":{"languages":["Chinese","English"]}}
    data1 = {"_id":2,name:"段",age:22,"hobbies":["乒乓球","游戏"],"skills":{"languages":["Chinese","French"]}}
    

    通过读取数据插入到集合中

    db.dydcoll.insertOne(data0)	# 将data0中的数据插入到ydCL集合中
    db.dydcoll.insertMany([data0,data1])	# # 将data0和data1中的数据插入到ydCL集合中
    

    通过load()加载js脚本生成并导入数据

    准备js脚本,比如创建testData.js

    let names = ["段雨晗","张珊","李思","王武","老六","吴琦"]
    let hobbies = ["旅游","游泳","打篮球","打乒乓球","看电影"]
    let languages = ["Python","Java","Javascript","Go","PHP"]
    let Info = []
    for(let i=0;i<10;i++){
        let nameIdx = Math.floor(Math.random()*names.length)
        let hobbyIdx = Math.floor(Math.random()*hobbies.length)
        let languageIdx = Math.floor(Math.random()*languages.length)
        let levels = Math.floor(Math.random()*50)
        let ages = 10 + Math.floor(Math.random()*20)
        let info = {
            name:names[nameIdx],
            age:ages,
            hobby:hobbies[hobbyIdx],
            language:languages[languageIdx],
            level:levels,
            account:{user:"dyd"+nameIdx,pwd:"1234"+ages,level:levels}
        }
        Info.push(info)
    }
    db.ydCL.insertMany(Info)
    

    进入MongoDB Shell,执行一个js文件

    load("testData.js")	# 执行js文件,生成10条数据
    db.ydCL.find()		# 查看生成的数据
    
  2. 查询文档

    db.ydCL.find()		# 查询ydCL集合中所有数据
    db.ydCL.findOne()	# 查询ydCL集合中第一条数据
    db.ydCL.find().sort({age:-1})	# 排序,查询结果根据age降序排列,1表示升序排列
    db.ydCL.find().skip(0).limit(5)	# 分页查询,从第1条数据开始查,每页显示5条数据
    db.ydCL.find({name:/^段/})	# 使用正则表达式查询,查询name包含“段”的数据
    db.ydCL.distinct("name")	# 去重显示name字段所有的值
    

    条件查询

    查询条件经常会用到运算,在MongoDB中与MySQL中不同,不能使用><等符号,需要用聚合管道操作符,下面简单介绍一下常用的操作符,其它操作符使用时多查看官方介绍吧

    操作符 解释说明
    $eq 相等,如:{age:{$eq:18}},亦可写{age:18},请根据实际查询语句做选择
    $gt 大于,如:age:{$ge:18}}
    $gte 大于等于,如:age:{$gte:18}}
    $lt 小于,如:age:{$lt:18}}
    $lte 小于等于,如:age:{$lte:18}}
    $ne 不相等,如:age:{$ne:18}}
    $and 与运算,如:{$and:[{name:"dyd"},{age:17}]}
    $nor 非运算,如:{$nor:[{name:"dyd"},{age:17}]}
    $or 或运算,如:{$or:[{name:"dyd"},{age:17}]}
    $in 成员运算,如:{"age":{$in:[18,19,20]}}
    $type 返回指定数据类型的文档,类型可以用数字表示,如:2表示string,10表示null,16表示int等,举例:{age:{$type:16}}
    db.ydCL.find({name:"段雨晗"})			# 查找name为“段雨晗”的数据
    db.ydCL.find({name:"李思",age:{$gt:18}})	#查找name为“李思”且age大于18的数据
    db.ydCL.findOne({name:"老六",age:{$lte:20}})	#查找name为“老六”且age小于等于18的数据结果中的第一个结果
    db.ydCL.find({$and:[{name:"王武"},{age:17}]})	# 查找name为“王武”以及age等于17的数据
    db.ydCL.find({$nor:[{name:"张珊"},{age:{$gt:20}}]})	# 查找name为“张珊”或者age大于17的数据
    db.ydCL.find({"name":{$in:["张珊","李思","王武"]}})	# 查找包含指定成员的数据
    db.ydCL.find({age:{$type:"string"}})	# 查看age是字符串类型的数据
    

    投影

    上文查询结果会将所有字段展示出来,且默认展示_id字段,要限制展示全部字段信息,需要设置字段列表值为1或0,1表示显示该字段,0表示隐藏该字段

    db.ydCL.find({hobby:"游泳"},{_id:0,name:1})	# 查询hobby为“游泳”的数据,只展示name
    db.ydCL.find({age:{$gt:15}},{_id:0,name:1,language:1})	# 查询age大于15的数据,只展示name和language字段的值
    
  3. 更新文档

    使用update更新时需要更新操作符,常用的更新操作符如下,更多信息请查看官方介绍

    操作符 解释说明
    $currentDate 将字段的值设置为当前日期,可以是日期或时间戳
    $inc 对数值类型字段进行增减
    $min 当指定值小于现有字段值时才更新
    $max 当指定值大于现有字段值时才更新
    $mul 将字段的值乘以指定的数量
    $rename 修改字段名称,其实质是将查询结果重旧字段下移到新字段下
    $set 设置文档中字段的值,若不存在则进行创建
    $unset 从文档中删除指定的字段
    $addToSet 仅当集合中不存在元素时,将元素添加到数组中,若元素存在,则不添加,具有排重功能
    $pop 删除数组的第一项或最后一项
    $pull 删除与指定查询匹配的所有数组元素
    $push 将数组追加到数组,若数组不存在则会进行初始化
    $pullAll 从数组中删除所有匹配的值
    db.ydCL.updateOne({_id:2},{$set:{name:"李四"}})	# 更新id为2的name为“李四”
    db.ydCL.updateOne({_id:3},{$set:{name:"zhangsan"}},{upsert:true})	# upsert表示若数据不存在则插入到集合中
    db.ydCL.updateMany({age:22},{$pop:{hobbies:-1}})	# 更新删除年龄为22的第最后一项,1表示删除第一项
    db.ydCL.findOneAndUpdate({age:{$eq:5}},{$set:{hobby:"购物"}})# 查找age等于5的用户并将hobby改为“购物”,默认返回旧数据
    # ↓更新id为3的文档,replace不能使用操作符,文档内容必须包含全部字段信息,不包含字段内容会被置空
    db.ydCL.replaceOne({_id:3},{name:"张三",age:18,hobby:"篮球"}})
    db.ydCL.findOneAndReplace({age:5},{name:"李斯",age:19,hobby:"购物",language:"Go",author:"dyd-1"})
    
  4. 删除文档

    db.ydCL.deleteOne({name:"张三"})	# 删除name为“张三”的数据,如果有多条则只删除第一条
    db.ydCL.deleteMany({name:"王武"})	# 删除所有name为“王武”的数据
    db.ydCL.deleteMany({name:"老六"},{age:{$gte:60}})	# 删除所有name为“老六”且age大于等于60的数据
    db.ydCL.findOneAndDelete({_id:ObjectId("62e8ea7135f956a18f9b002e")})	# 查找后删除
    
  5. 聚合操作

    聚合操作是用于处理数据并返回计算结果的,比如比较运算、最大值、最小值、平均值、求和、分组、排序等,用于查询和更新数据,聚合操作可以对分组数据执行各种操作以返回预期结果,聚合操作分三类:单一作用聚合、聚合管道、MapReduce

    • 单一作用聚合:对单个集合进行聚合文档操作,比如:db.CL.distinct()db.CL.countDocuments()
    • 聚合管道:一个数据聚合计算框架,可以作用在一个或多个集合上,可对集合中的数据进行一系列运算后将数据转为期望形式进行展示,这个聚合过程称为管道(Pipeline),由多个阶段(Stage)组成,每个管道接受一系列文档(即原始数据),每个阶段会对这些文档进行一系列的运算,然后将运算后的结果文档输出给下一个阶段,直到聚合完成输出最终结果
    • MapReduce:处理每个文档并向输入文档发送一个或多个对象的map阶段及reduce组合map操作的输出阶段,直接看官方介绍吧

    上文介绍了聚合管道操作符,下面介绍一下聚合管道阶段,二者都属于聚合操作,聚合管道阶段是在db.collection.aggregate()方法中使用的,如下为常用聚合管道阶段,其它管道阶段请查看官方介绍

    阶段 解释说明
    $project 重塑文档,类似MySQL中的as
    $match 设置筛选条件,类似MySQL中的where
    $sort 排序,-1表示降序,1表示升序,类似MySQL中的order by
    $group 分组,类似MySQL中的group by,只是在MongoDB中group只返回统计结果,所以常结合运算操作符使用
    $lookup 左外连接另一个集合,类似MySQL中的left outer join
    $count 返回最终结果数,类似MySQL中的count函数
    $skip 指定查询结果从哪条记录开始显示,常和$limit一起用
    $limit 主要用于指定查询结果显示多少条数据,与$skip一起时,类似于MySQL中的limit
    $unwind 拆分数组,解构一个数组字段并输出每个元素
    db.ydCL.aggregate()	# 参数为空时和find()操作一样,会查询所有数据
    db.ydCL.aggregate([{$project:{_id:0,"姓名":"$name"}}])	# 查询所有name,字段名设为“姓名”
    db.ydCL.aggregate([{$project:{语言:"$name",_id:0,"account.level":1}}])	# 查询name及嵌套文档中的level
    db.ydCL.aggregate([{$project:{_id:0,"账号":{"用户名":"$account.user","显示":1}}}])	# 查询并只显示嵌套文档中的user
    db.ydCL.aggregate([{$match:{age:{$lt:25}}},{$count:"age"}])		# 统计age小于25的数量
    db.ydCL.aggregate([{$match:{age:{$gt:15}}},{$sort:{age:-1}}])	# 查找age大于15的数据并降序排列
    db.ydCL.aggregate([{$skip:2},{$limit:4}])	# 分页展示,从第三条数据开始查询,每页显示4条数据
    db.dydcoll.aggregate([{$unwind:"$skills.languages"}])	# 拆分skills.languages数组,并输出对应的数据
    # 集合ydCL与集合dydcoll根据name完成左外连接
    db.ydCL.aggregate([{$lookup:{from:"dydcoll",localField:"name",foreignField:"name",as:"测试"}}])
    # 查询name分组,统计同名数量,对应账号等级以及平均年龄
    db.ydCL.aggregate([{$group:{_id:"$name",总数:{$sum:1},等级:{$max:"$account.level"},平均年龄:{$avg:"$age"}}}])
    

    常用的$concat$substrCPtoLowertoUppertoStringtoInt等,至少要包含一个聚合管道阶段

    db.ydCL.aggregate([{$project:{_id:0,"拼接":{$concat:["$name","-","$account.user"]}}}])	# 拼接两个字段
    db.ydCL.aggregate([{$project:{_id:0,"截取":{$substrCP:["$name",0,1]}}}])		# 截取name字段中的姓氏
    db.ydCL.aggregate([{$project:{_id:0,"转大写":{$toUpper:"$account.user"}}}])	# 嵌套文档中的user转大写
    # 将age小于20的language字段的值转为小写
    db.ydCL.aggregate([{$match:{age:{$lte:20}}},{$project:{_id:0,"转小写":{$toLower:["$language"]}}}])
    
索引

MongoDB在集合级别定义索引,默认创建_id字段作为唯一索引,MongoDB中的索引与其他数据库系统中的索引类似,详细了解请查看官方介绍

  1. 创建索引

    # 将name创建为唯一索引,1表示升序索引,-1表示降序索引,sparse表示索引引用指定字段的文档,设置索引有效期,索引名为“nameIdx”
    db.dydcoll.createIndex({"name":1}, {unique:true,sparse:true,expireAfterSeconds:3600,name:"nameIdx"})
    
  2. 查看索引

    db.dydcoll.getIndexes()
    
  3. 删除索引

    db.dydcoll.dropIndex("nameIdx")	# 删除指定索引
    db.dydcoll.dropIndexex()		# 删除全部索引
    
使用SQL查询

可使用Studio 3T管理工具编写SQL语句查询MongoDB数据,如下示例

db.ydCL.find()		# 查询所有数据
db.ydCL.find({"account.user":"dyd5"},{_id:0,name:1})	# 查询嵌套文档中user为dyd5的name
db.ydCL.find({"age":{$in:[17,19,21]}})					# 查询age等于17,19,21的数据
db.ydCL.aggregate([{$match:{age:{$lte:25}}},{$count:"age"}])	# 查询age小于等于25的数据总条数
# 查询名字和平均年龄,根据name分组,并根据平均年龄降序排列
db.ydCL.aggregate([{$group:{_id:"$name",avgAge:{$avg:"$age"}}},{$sort:{avgAge:-1}}])

以上MongoDB语句对应的SQL语句如下所示,常用MySQL语句总结请查看此文章

select * from ydCL;
select name from ydCL where account.user = "dyd5";
select * from ydCL where age in (17,19,21);
select count(age) from ydCL where age <= 25;
select name,avg(age) from ydCL group by name order by avg(age) desc;
备份/恢复

进入Database-Tools页面,选择版本、平台及包格式,下载安装工具,详细使用方法请查看官方介绍

wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel80-x86_64-100.5.4.rpm	# 下载
rpm -ivh mongodb-database-tools-rhel80-x86_64-100.5.4.rpm	# 安装
  1. 数据备份

    # 备份数据test数据库及用户凭据admin数据库到opt目录下
    mongodump -h 192.166.66.24:27017 -o /opt -u dyd -p 123456 --authenticatiOnDatabase=test
    
    • -h:数据库地址
    • -o:备份存放位置
    • -u:用户名,需要身份认证时使用
    • -p:密码,需要身份认证时使用
    • -d:需要备份的数据库,仅备份指定的数据库
    • --authenticationDatabase:需要备份的数据库,同时保存用户凭据的数据库(即admin库)和指定的数据库
  2. 数据恢复

    # 重opt目录下恢复数据到test数据库下的ydCL集合中,同时恢复用户凭据到admin库
    mongorestore --nsInclude=test.ydCL /opt/ -u dyd -p 123456 --authenticatiOnDatabase=test
    
    • --nsInclude:指定要恢复数据的集合

    MongoDB常用命令总结及安装介绍

导入/导出

支持导入导出jsoncsv格式的文件

  1. 数据导出

    # 导出test数据库中ydCL集合的数据到opt目录下,命名为ydCL_bak.json
    mongoexport -h 192.166.66.24:27017 -c ydCL -o /opt/ydCL_bak.json -u dyd -p 123456 -d test
    
  2. 数据导入

    # 导入ydCL_bak.json文件中的数据到test数据库中的dydcol集合
    mongoimport -h 192.166.66.24:27017 /opt/ydCL_bak.json -c dydcol -u dyd -p 123456 -d test
    

MongoDB常用命令总结及安装介绍

MongoDB版本更新后命令有增删改,不同版本命令可能存在差异,文中也未详细介绍命令可选参数,所以使用时请多查看官方文档,多使用--help命令和tab键补全功能


推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 在OpenShift上部署基于MongoDB和Node.js的多层应用程序
    本文档详细介绍了如何在OpenShift 4.x环境中部署一个包含MongoDB数据库和Node.js后端及前端的多层应用程序。通过逐步指导,读者可以轻松完成整个部署过程。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
author-avatar
广工华立城建学部艺术团
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有