当前位置:Gxlcms > 数据库问题 > MongoDB

MongoDB

时间:2021-07-01 10:21:17 帮助过:44人阅读

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

解压

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
storageEngine = mmapv1

启动

# 启动数据库
mongod  -f /application/mongodb/conf/mongodb.conf
#关闭数据库
mongod  -f /application/mongodb/conf/mongodb.conf --shutdown
# 访问数据库
mongo
#再数据库中关闭方法
> use admin
> db.shutdownServer()

3.基本操作

3.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

3.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()

4.用户权限

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: "root",
    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
> 

转载 https://www.cnblogs.com/clsn/p/8214194.html#auto_id_38

MongoDB

标签:path   对应关系   python   uri   shutdown   log   map   dde   art   

人气教程排行