MongoDB
1.简介
MongoDB并非芒果的意思,而是源于 Humongous(巨大)一词。
1.1MongoDB的特性
MongoDB的3大技术特色如下所示:
除了上图所示的还支持:
二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。
但是其也有些许的缺点,例如:
多表关联: 仅仅支持Left Outer Join
SQL 语句支持: 查询为主,部分支持
多表原子事务: 不支持
多文档原子事务:不支持
16MB 文档大小限制,不支持中文排序 ,服务端 Javascript 性能欠佳
1.2关系型数据库与mongodb对比
存储方式对比
在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。
数据库中的对应关系,及存储形式的说明
MongoDB与SQL的结构对比详解
SQL Terms/Concepts | MongoDB Terms/Concepts |
---|---|
database | database |
table | collection |
row | document or BSON document |
column | field |
index | index |
table joins | embedded documents and linking |
primary keySpecify any unique column orcolumn combination as****primary key. | primary keyIn MongoDB, the primary key isautomatically set to the _id field. |
aggregation (e.g. group by) | aggregation pipelineSee the SQL to Aggregation MappingChart. |
1.3 MongoDB数据存储格式
JSON****格式
JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。
MongoDB 使用JSON(JavaScript ObjectNotation)文档存储记录。
JSON数据库语句可以容易被解析。
Web 应用大量使用,NAME-VALUE 配对
BSON****格式
BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
二进制的JSON,JSON文档的二进制编码存储格式
BSON有JSON没有的Date和BinData
MongoDB中document以BSON形式存放
例如:
> db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});
1.4 MongoDB的优势
📢 MongoDB是开源产品
📢 On GitHub Url:https://github.com/mongodb
📢 Licensed under the AGPL,有开源的社区版本
📢 起源& 赞助by MongoDB公司,提供商业版licenses 许可
这些优势造就了mongodb的丰富的功能:
JSON 文档模型、动态的数据模式、二级索引强大、查询功能、自动分片、水平扩展、自动复制、高可用、文本搜索、企业级安全、聚合框架MapReduce、大文件存储GridFS
2.安装
下载安装包
yum -y install vim lrzsz
解压
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz
tar xf mongodb-linux-x86_64-rhel55-3.2.7.tgz -C /application/
改名
mv mongodb-linux-x86_64-rhel55-3.2.7/ mongodb
加环境变量
vi /etc/profile
export MONGODB_HOME=/application/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
source /etc/profile
创建mongodb数据文件和日志文件的存放位置,并且对启动项进行配置
mkdir -p data
chmod -R 777 data
mkdir logs
cd logs
touch mongodb.log
mkdir conf
vim mongodb.conf
dbpath=/application/mongodb/data #数据文件存放目录
logpath=/application/mongodb/logs/mongodb.log #日志存放目录
port=27017 #端口
fork=1 #以守护程序的方式启用,即在后台运行
logappend=true
maxConns=5000
#auth=true
bind_ip=0.0.0.0
storageEngine = mmapv1
启动
# 启动数据库
mongod -f /application/mongodb/conf/mongodb.conf
#关闭数据库
mongod -f /application/mongodb/conf/mongodb.conf --shutdown
# 访问数据库
mongo
#再数据库中关闭方法
> use admin
> db.shutdownServer()
3.开机自启动
vim /lib/systemd/system/mongodb.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/application/mongodb/bin/mongod --config /application/mongodb/conf/mongod
b.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/application/mongodb/bin/mongod --shutdown --config /application/mongodb/c
onf/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
设置权限
`chmod 754 mongodb.service`
启动关闭服务,设置开机启动
#启动服务 systemctl start mongodb.service
#关闭服务 systemctl stop mongodb.service
#开机启动 systemctl enable mongodb.service
4.基本操作
4.1查
在客户端指定数据库进行连接
mongo 10.0.0.152/admin
MongoDB shell version: 3.2.8
connecting to: 10.0.0.152/admin
> db
admin
查看当前数据库版本
> db.version()
3.2.8
切换数据库
> use test;
switched to db tes
显示当前数据库
> db
test
> db.getName()
test
查询所有数据库
show dbs;
查看数据库当前状态
> use wwww;
> db.stats()
查看当前数据库的连接机器地址
> db.getMongo()
connection to 127.0.0.1
4.2数据管理
创建数据库
use wwww;
创建数据库:
当use的时候,系统就会自动创建一个数据库。
如果use之后没有创建任何集合。系统就会删除这个数据库。
删除数据库
> show dbs;
wwww 0.000GB
local 0.000GB
test 0.000GB
> use wwww
switched to db clsn
> db.dropDatabase()
{ "dropped" : "wwww", "ok" : 1 }
删除数据库:
如果没有选择任何数据库,会删除默认的test数据库
创建集合
> use wwww;
switched to db clsn
> db.createCollection('a')
{ "ok" : 1 }
> db.createCollection('b')
{ "ok" : 1 }
查看当前数据下的所有集合
> show collections;
a
b
> db.getCollectionNames()
[ "a", "b" ]
查看创建的合集
> db.getCollectionNames()
[ "a", "b", "c" ]
查看合集里的内容
> db.c.find()
{ "_id" : ObjectId("5a4cbcea83ec78b7bea904f8"), "name" : "wwww" }
{ "_id" : ObjectId("5a4cbcfc83ec78b7bea904f9"), "url" : "http://blog.wwww.com" }
重命名集合
> db.c.renameCollection("wwww")
{ "ok" : 1 }
> db.getCollectionNames()
[ "a", "b", "wwww" ]
删除合集
> db.a.drop()
true
> db.getCollectionNames()
[ "b", "wwww" ]
查询集合中的查询所有记录
> db.log.find()
5.用户权限
MongoDB数据库默认是没有用户名及密码的,即无权限访问限制。为了方便数据库的管理和安全,需创建数据库用户。
权限 | 说明 |
---|---|
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
root | 只在admin数据库中可用。超级账号,超级权限 |
用户创建语法
{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}
user字段:用户的名字;
pwd字段:用户的密码;
cusomData字段:为任意内容,例如可以为用户全名介绍;
roles字段:指定用户的角色,可以用一个空数组给新用户设定空角色;
roles 字段:可以指定内置角色和用户定义的角色。
创建管理员用户
#进入管理数据库
> use admin
#创建管理用户,root权限
db.createUser(
{
user: "root",
pwd: "QDzzyc11",
roles: [ { role: "root", db: "admin" } ]
}
)
创建管理员角色用户的时候,必须到admin下创建。
删除的时候也要到相应的库下操作。
查看创建的管理员用户
show users
验证用户是否能用
> db.auth("root","root")
1 # 返回 1 即为成功
用户创建完成后在配置文件中开启用户验证
cat >>/application/mongodb/conf/mongod.conf<<-'EOF'
security:
authorization: enabled
EOF
重启服务
登录
注意:用户在哪个数据库下创建的,最后加上什么库。
命令行中进行登陆
[mongod@MongoDB ~]$ mongo -uroot -proot admin
MongoDB shell version: 3.2.8
connecting to: admin
>
删除之前设置的所有用户
db.system.users.remove({})
删除原auth认证方式,并设置为MONGODB-CR
db.system.version.findOne({"_id":"authSchema"})
db.system.version.remove({})
db.system.version.insert({"_id":"authSchema","currentVersion":3})
重新添加admin用户(超级管理员)
db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
新建test数据库,并为test数据库设置用户及角色(权限)
use test
db.createUser({user:"tester",pwd:"123456",roles:[{role:"dbOwner",db:"test"}]})
sh startup.sh -m standalone
转载 https://www.cnblogs.com/clsn/p/8214194.html#auto_id_38
故障
error while loading shared libraries:libssl.so.6
yum install libssl.so.6
ln -sf /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.6
ln -sf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.6
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?