mongodb极速安装及基础操作命令

本文详细介绍了MongoDB在Linux上的安装步骤,包括前置启动、后置启动和通过配置文件启动。还讲解了MongoDB的权限管理,如权限值、用户创建、权限更新和删除。此外,内容涵盖数据库和集合的操作,如创建、删除、查询和更新,以及文档的插入、更新、删除和查询。最后,文章讨论了索引操作、聚合查询和正则查询等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mongodb

一、安装

    # linux 安装
    下载mongodb,并解压
    # 进入mongodb目录,在目录下创建数据存储目录
    mkdir -p data/db
    

启动

mongodb 的启动方法分为两种方式

  • 前置启动
  • 后置启动

无论哪种启动方式都需要执行mongodb/bin目录中的mongod命令

前置启动

# 进入mongodb/bin
# --dbpath 就是上一步自己创建的data/db那个目录
./mongod --dbpath /www/server/mongodb/data/db
# 关闭
CTRL + c

后置启动

# 进入mongodb目录中
cd /www/server/mongodb
# 创建日志文件目录
mkdir log
# 进入日志文件目录中
cd log
# 创建日志文件
touch mongodb.log
# 进入mongodb/bin
cd /www/server/mongodb/bin
# 启动
./mongod --dbpath /www/server/mongodb/data/db --logpath /www/server/mongodb/log/mongodb.log --fork
# 关闭
./mongod --shutdown --dbpath /www/server/mongodb/data/db

通过配置文件启动

# 进入mongodb根目录创建配置文件
cd /www/server/mongodb
vi mongodb.conf
# 以下是文件内容
dbpath=/www/server/mongodb/data/db
logpath=/www/server/mongodb/log/mongodb.log
fork=true
port=27017
bind_ip=0.0.0.0
logappend=true
#保存
# 启动
./bin/mongod --config /www/server/mongodb/mongodb.conf
# 查看启动状态
ps aux | grep mongodb
# 关闭
./bin/mongod --shutdown --config /www/server/mongodb/mongodb.conf

常见启动参数

--quiet 安静输出
--port 指定服务端口号 默认27017
--bind 绑定服务IP,若绑定127.0.0.1,则只能本机访问
--logpath 指定服务日志文件,
--logappend 使用追加的方式写日志
--fork 守护进程方式启动
--auth 启动验证
--config 只当配置文件路径,是文件不是目录
--journal 启动日志选项,mongodb的数据库操作将会写入到journal文件夹的文件里

配置环境变量,使任何目录下都可以操作mongodb

vi etc/profile
# 进入文件最下方,追加如下内容并保存
export PATH=$PATH:/www/server/mongodb/bin
# 重载配置
source /etc/profile
# 查看是否成功
mongod --help

权限管理

权限列表

权限值说明
Read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引的创建、删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库读权限
readWriteAnyDatabase只在admin数据库中可用,赋予用户所有数据库读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的user Admin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root只在admin数据库中可用,超级账户,超级权限

查看admin中的用户

use admin
db.system.users.find()

创建用户

db.createUser({
    user:"gangan",
    pwd:"1234560",
    roles:[
        {role:"userAdminAnyDatabase",db:"admin"}
    ]
})
# 重启生效
db.shutdownServer()

使用权限方式启动mongodb

在启动的配置文件中添加auth=true

dbpath=/www/server/mongodb/data/db
logpath=/www/server/mongodb/log/mongodb.log
fork=true
port=27017
bind_ip=0.0.0.0
logappend=true
auth=true

重启mongodb即可

认证函数

db.auth("username","password")

创建普通用户

db.createUser({
    user:"tt",
    pwd:"123456",
    roles:[
        {
            role:"readWrite",
            db:"article"
        }
    ]
})
# 在哪个库创建的就需要在那个库登录

更新用户角色

使用db.updateUser()来更新用户角色,该函数需要用户具有userAdminAnyDatabase或者更高权限

db.updateUser("gangan",{roles:[
    {role:"userAdminAnyDatabase",
    db:"admin"},
    {role:"dbAdminAnyDatabase",
    db:"admin"}
]})

更新用户密码

  • 使用db.updateUser()
# 需要进入admin 数据库操作
db.updateUser("username",{pwd:"123456"})
  • 使用db.changeUserPassord()
db.changeUserPassword("username","password")

删除用户

通过db.dropUser()函数删除用户,删除需要切换到创建用户时所指定的数据库才可以删除,操作用户需要具备userAdminAnyDatabase权限

db.dropUser("username")

数据库操作

一、创建数据库

在mongodb中创建数据库使用的是use 命令,该命令有两层含义

  • 切换到指定数据库
  • 如果数据库不存在则创建该数据库
use article

二、查看所有数据库

如果开启了用户认证,则需要完成认证过后才能使用该命令
如果是普通用户登录时,那么只能查看该用户拥有的数据库

show dbs

三、 删除数据库

使用db.dropDatabase()函数来删除数据库,需要操作用户具备dbAdminAnyDatabase权限,然后切换到需要删除的数据库,执行该命令

db.dropDatabase()

集合操作

一、创建集合

使用db.createCollection()函数来床架集合

语法格式:db.createCollection(name,option)

name:要创建的集合名称

option:可选参数,指定有关内存大小及索引的选项

option参数参考如下:

|字段|类型|描述|
|—|
|capped|bool|可选参数,如果为true,则创建固定集合。固定集合是指有固定大小的集合,当达到最大值时,他会自动覆盖最早的文档|
|autoindxid|bool|可选如果为true自动在_id字段创建索引,默认为false|
|size|number|可选为固定集合指定最大值,单位字节。如果capped为true,也需要指定该字段|
|max|number|可选,指定固定集合中包含文档的最大数量|

db.createCollection("collectionName",{capped:true,autoindxid:true,size:200000,max:1000})

二、隐式创建集合

db.collectionname.insert({name:"gangan"})

查询集合列表

show collections
or
show tables

删除集合

需要切换到删除集合的数据库

db.collection.drop()

文档操作

一、插入文档

插入单个文档
# 使用insert
db.collectionName.insert({
    name:"gangan",
    hobby:["篮球","足球","羽毛球"],
    info:{
        length:"170",
        weigth:"60"
    }
})

# 使用save
db.collectionName.save({
    name:"gangan",
    hobby:["篮球","足球","羽毛球"],
    info:{
        length:"170",
        weigth:"60"
    }
})

# 使用insertOne(3.2版本后才有)
db.collectionName.insertOne({
    name:"gangan",
    hobby:["篮球","足球","羽毛球"],
    info:{
        length:"170",
        weigth:"60"
    }
})
插入多个文档
# insret or save都能实现
# insertMany(3.2可用)
db.collectionName.insert([
    {
        name:"gangan",
        hobby:["篮球","足球","羽毛球"],
        info:{
            length:"170",
            weigth:"60"
        }
    },
    {
        name:"gangan2",
        hobby:["篮球","足球","羽毛球"],
        info:{
            length:"170",
            weigth:"60"
        }
    }
])
通过变量插入
document=({name:"gangan",age:"18"})
db.collectionName.insert(document)

二、更新文档

  • 使用db.collectionName.update({查询条件},{更新内容},{更新可选参数}),此操作会覆盖原来的内容,可选参数为{multi:true}时批量更新
db.collectionName.update({name:"gangan"},{name:"ganganUpdate"})
  • 使用$set操作符进行update更新,此操作不会覆盖原来的内容,当更新的内容不存在时会增加修改内容,可选参数为{multi:true}时批量更新
db.collectionName.update({name:"ganganUpdate"},{set:{name:"gangan"}},{multi:true})
  • 使用$inc操作符对字段进行自增处理,可选参数为{multi:true}时批量更新
db.collectionName.update({name:"gangan"},{$inc:{score:1}})
db.collectionName.update({name:"gangan"},{$inc:{score:-2}})
  • 使用$unset操作符进行删除处理,可选参数为{multi:true}时批量更新
db.collectionName.update({name:"gangan"},{$unset:{sex:1}})
  • 使用$push操作符,向文档的某个数组类型的键添加数组元素,不过滤数组元素,要求键类型必须为数组类型,键不存在则创建
db.collectionName.update({name:"gangan"},{$push:{tag:"javascript"}})
  • 使用$pop操作符,从数组尾部删除元素
# tag后面的为正值时,从后往前删除,反之从前往后删除
db.collectionName.update({name:"gangan"},{$pop:{tag:1}})
  • 使用pull操作符,删除数组中指定元素
db.collectionName.update({name:"gangan"},{$pull:{tag:"go"}})
  • 使用pullAll操作符,删除数组中指定的多个元素
db.collectionName.update({name:"gangan"},{$pullAll:{tag:["tag1","tag2"]}})
  • 使用$rename操作符
db.collectionName.update({nam:"gangan"},{$rename:{tag:"tags"}})

三、删除文档

  • 使用remove()函数,不推荐使用
    语法格式:remove({删除条件},删除参数(可选))
#存在可选参数表示只删除一条
db.collectionName.remove({name:"gangan"},1)
#不存在第二个参数表示删除所有符合条件的数据
db.collectionName.remove({name:"gangan"},1)

remove()方法并不会真正释放空间,需要继续执行db.repairDataBase()来回收磁盘空间

  • 使用deleteOne()函数,删除单个文档,推荐使用
db.collectionName.deleteOne({name:"gangan"})
  • 使用deleteMany()函数,删除满足条件的所有数据,推荐使用
db.collectionName.deleteMany({name:"gangan"})
#删除所有文档
db.collectionName.deleteMany({})

#删除整张表
db.collectionName.drop()

四、查询文档

1、find() 函数

在mongoDb中可以使用find()函查询文档

语法格式:find({查询条件(可选)},{指定投影的键(可选)})

pretty()函数可以使用格式化的方式来显示所有文档

如果未给定参数则表示查询所有数据

# 查询所有文档
db.articles.find()

#查询指定条件文档
db.articles.find({name:"gangan"})

#查询指定字段文档
db.articles.find({name:"gangan"},{_id:0,contentt:1})
2、查询符合条件的单条数据
db.articles.findOne()
3、模糊查询

通过//、^、$实现模糊查询,注意使用模糊查询时查询条件不能放在双引号或单引号中

#查询字符串包含a的数据
db.articles.find({content:/a/})

#查询字符串以g开头的文档
db.articles.find({content:/^g/})

#查询以n结尾的文档
db.articles.find({content:/n$/})

五、条件操作符

1、 g t 、 gt、 gtlt、 g t e 、 gte、 gtelte

我们可以使用 g t 、 gt、 gtlt等操作做条件判断,该操作符可以对数字或日期进行判断

语法格式:find({key:{操作符:条件}}) or findOne({key:{操作符:条件}})

db.articles.find({view:{$gt:10}})
db.articles.find({view:{$gte:10}})
db.articles.find({view:{$lt:10}})
db.articles.find({view:{$lte:10}})
2、 e q 、 eq、 eqne

$eq:用于两个条件相等的操作判断

$ne:用于两个条件不相等的操作判断

# 查找view等于10的文档
db.articles.find({view:{$eq:10}})
# 查找view不等于10的文档
db.articles.find({view:{$ne:10}})
3、$and $or

$and:此操作符用来表示并且的关系

语法格式:find({$and:[{条件一},{条件二}]})

#查询view>5 and view < 100的文档数据
db.articles.find({$and:[{view:{$gt:5}},{view:{$lt:100}}]})

#查询view<=5 or view >= 100的文档数据
db.articles.find({$or:[{view:{$lte:5}},{view:{$gte:100}}]})


#联合使用
db.articles.find({$and:[{$or:[{desc:"d2"},{desc:"d3"}]},{view:100}]})
4、$type 操作符

基于bson类型来检索集合中匹配的数据,并返回匹配结果

db.articles.find({content:{$type:"number"}})

六、limit函数与skip函数

1、limit函数

如果需要在mongoDB中拂去指定数量的数据记录,可以使用此函数

语法格式:db.collectionName.find().limit(int)

db.articles.find().limit(2)
2、skip函数

通常用来结合limit()函数做分页处理,用来表示跳过多少条数据

db.articles.find().skip(2).limit(2)

七、sort排序

通过参数指定排序字段,并使用1和-1来指定排序的方式,其中1为升序、-1为降序
语法格式:db.collectionName.find().sort({field:-1})

db.articles.find().sort({view:-1})

索引操作

一、创建索引

使用createIndex()函数来创建索引,在创建索引时需要指定排序规则,1 按照升序规则常见索引,-1 按照降序规则创建索引

语法格式:db.collectionName.createIndex({field1:1,field2:-1},{创建索引的参数(可选)})

参数数据类型默认值说明
backgroundbooleanfalse后台创建索引,以便于创建索引时不阻止其他数据库的活动
uniquebooleanfalse创建唯一索引
namestring索引名称,未指定时mongodb会生成一个索引字段的名称和排序顺序串联
partialFilterExpreessiondocument如果指定mongodb指挥满足过滤表达式的记录
sparsebooleanfalse对文档不存在的字段不启用索引
epireAfterSecondsinteger指定索引过期时间
storageEnginedocument类型允许用户配置索引的储存引擎
db.articles.createIndex({view:-1},{background:true})

二、查看索引

db.articles.getIndexes()

三、查看索引的键

通过使用getIndexKeys()函数查看集合的索引键

db.articles.getIndexKeys()

四、查看集合索引的大小,单位为字节

# 查看总的索引大小
db.articles.totalIndexSize()
#查看每个索引大小
db.articles.totalIndexSize(true)

五、修改索引

mongodb没有提供方法来修改索引,所以我们只有先删除索引,再创建索引

六、删除索引

# 删除指定索引
db.articles.dropIndex("content_1")
# 删除所有索引
db.articles.dropIndexes()

六、查询计划

通过explain()函数来启动查询计划,分析索引使用情况

语法格式:db.collectionName.find({}).explain()

db.articles.find().explain()

正则查询

语法1:db.collectionName.find({field:正则表达式})

语法2:db.collectionName.find({field:{ r e g e x : 正 则 表 达 式 , regex:正则表达式, regex:,options:正则选项}})

正则表达式格式:/xx/

正则选项

  • i - 不区分大小写以匹配大小写的情况
  • m - 多行查找,如果内容里面不存在换行(例如:\n)或者条件上没有(start、end),那么该选项没有任何效果
  • x - 设置x选项后,正则表达式中的非转义的空白字符将被忽略。需要 r e g e x 与 regex与 regexoptions语法
#查询以 * 开头
db.articles.find({name:/^S/})

#查询以 * 结尾
db.articles.find({name:/n$/})

# 查询包含 * 内容
db.articles.find({content:/g/})

# 查询 * 开头,忽略大小写
db.articles.find({content:/^T/i})

# 查询以 T 开头,以 2 结尾的
db.articles.find({content:/^T.*2$/i})

# 查询以T或者g开头的内容,忽略大小写
db.articles.find({content:/(^T|^g)/i})

# 查询不以t开头的内容
db.articles.find({content:/^[^t]/})

聚合查询

通过aggregate()函数来完成一些聚合查询

语法格式:

db.collectionName.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"分组键名","$分组键明",…,别名:{聚合运算:“¥运算列”}}},{条件筛选:{运算条件:运算值}}])

SQL操作/函数mongoDb聚合操作
where$match
group by$group
having$match
select$project
order by$sort
limit$limit
sum$sum
count$sum
join$lookup

1、求和 - $sum

# 相当于select count(*) as count from articles
db.articles.aggregate([{$group:{_id:null,count:{$sum:1}}}])

# 求某个字段的值
# select sum(view) as viewTotal from articles
db.articles.aggregate([{$group:{_id:null,viewTotal:{$sum:'$view'}}}])

# 查询view之和,并根据desc分组
# select desc as _id sum(view) as viewTotal from articles group by desc
db.articles.aggregate([{$group:{_id:'$desc',viewTotal:{$sum:'$view'}}}])

2、条件筛选 - $match

# 查找view大于50的数据条数
# sql select count(*) from article where view > 50
db.articles.aggregate([{$match:{view:{$gt:50}}},{$group:{_id:null,totalSize:{$sum:1}}}])

3、最大值、最小值、平均值

# 最大值
db.articles.aggregate([{$group:{_id:null,maxSize:{$max:"$view"}}}])

# 最小值
db.articles.aggregate([{$group:{_id:null,minSize:{$min:"$view"}}}])

# 平均值
db.articles.aggregate([{$group:{_id:null,avgView:{$avg:"$view"}}])

4、聚合查询字段投影 - $project

db.articles.aggregate([{$group:{_id:null,avg:{$avg:"$view"}}},{$project:{_id:0,avg:"$avg"}}])

日期处理

# 插入指定日期
# 标准时间格式 yyyy-mm-ddTHH:ii:ssZ
db.articles.insert({date:new Date("2021-04-16T23:30:22Z")})

# 使用ISODate("2021-0-16 23:30:22"),这个函数对时间格式要求低,推荐使用这个方法
dn.article.insert({date:ISODate("2021-04-16 23:22:3")})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值