MongoDB安装及常用操作
admin
2023-04-11 16:04:04
0


一、MongoDB简介


1、介绍

1)MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,也属于NoSQL。

2)在高负载的情况下,可以添加更多的节点,可以保证服务器性能。

3)MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。

4)MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成;MongoDB文档类似于JSON对象;字段值可以包括其他文档,数组及文档数组。


2、MongoDB和关系型数据库对比

SQL术语/概念MongoDB术语/概念解释说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfiled数据字段/域
indexindex索引
table joins
表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

MongoDB安装及常用操作

MongoDB安装及常用操作


二、MongoDB安装


如果安装epel扩展源,可以安装MongoDB2.4版本;但是我们要安装3.0版本,官方提供的源只支持64位系统。

1、搭建yum源

[root@centos ~]# vim /etc/yum.repos.d/mongodb-org-3.0.repo

[mongodb-org-3.0]

name=MongoDB Repository

baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64

gpgcheck=0

enabled=1

注意:若后续要用yum工具,要改成 enabled=0,即恢复使用原来的yum源了。

2、安装

[root@centos ~]# yum install -y mongodb-org

注意:下载时候因为是国外的源,有可能会出现下载中断的情况。


3、修改配置文件

[root@centos ~]# vim /etc/mongod.conf                   //去掉三处注释

  fork: true                       

  pidFilePath: /var/run/mongodb/mongod.pid

  bindIp:

MongoDB安装及常用操作


4、修改内核以及限制参数

[root@centos ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

[root@centos ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag

[root@centos ~]# vim /etc/security/limits.conf                        //末尾添加

mongod soft nofile 64000

mongod hard nofile 64000

mongod soft nproc 32000

mongod hard nproc 32000


5、启动MongoDB

[root@centos ~]# service mongod start

[root@centos ~]# ls /var/lib/mongo/                                     //查看生成的文件

journal  local.0  local.ns  mongod.lock  storage.bson  _tmp

注意:若启动失败,可以用下面命令启动,会有错误提示信息

[root@centos ~]# mongod -f /etc/mongod.conf


三、连接MongoDB


1、本机直接运行下面命令进入到mongodb shell中

[root@centos ~]# mongo


2、若监听端口并不是默认的27017,则连接时需加--port选项,例如端口号被修改为27018:

[root@centos ~]# mongo --port 27018


3、远程连接MongoDB,需要加--host选项,例如

[root@centos ~]# mongo --host 127.0.0.1


4、如果设置了验证,则连接时需加上用户名和密码(与MySQL相似),例如

[root@centos ~]# mongo -utpp -p123456                //用户名tpp,密码123456


四、MongoDB用户管理


1、mongodb用户是针对库来的,建立用户时要先进入到对应的库里

> use test

switched to db test

2、创建用户及角色

> db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]})

Successfully added user: {

        "user" : "admin",

        "roles" : [

                {

                        "role" : "dbOwner",

                        "db" : "userdb"

                }

        ]

}

3、查看所有用户

> use admin                                         //只有在admin库里才能查看到所有用户

switched to db admin

> db.system.users.find()                        //可以看到之前创建的admin用户

{ "_id" : "test.admin", "user" : "admin", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Ye/s***eMZ5IsVUaNRHN6A==", "storedKey" : "yocgLHpm2MUlL/VmViLZVirJBAE=", "serverKey" : "M6Rj/hxMVbgvaF9TmG4y+k7Dg3g=" } }, "roles" : [ { "role" : "dbOwner", "db" : "userdb" } ] }

4、查看当前库下所有用户

> use test                                             //因为admin库没有用户,而test库有

switched to db test

> show users                                       //查看当前库下所有用户  

{

        "_id" : "test.admin",

        "user" : "admin",

        "db" : "test",

        "roles" : [

                {

                        "role" : "dbOwner",

                        "db" : "userdb"

                }

        ]

}

5、删除用户

> db.dropUser('admin')                      //要先进入该用户所在的库           

true


五、MongoDB库管理


1、查看版本

> db.version()

3.0.7

2、创建库

> use userdb                                //如果库存在就切换

switched to db userdb

> db.createCollection('mycol')       //创建集合mycol,当创建了集合后,我们才可以看到userdb库

{ "ok" : 1 }

3、查看库

> show dbs

admin   0.078GB

local   0.078GB

userdb  0.078GB

4、删除当前所在库

> db.dropDatabase()

{ "dropped" : "userdb", "ok" : 1 }

> show dbs

admin  0.078GB

local  0.078GB

5、查看当前库状态信息

> use admin

switched to db admin

> db.stats()

{

        "db" : "admin",

        "collections" : 4,

        "objects" : 10,

        "avgObjSize" : 67.2,

        "dataSize" : 672,

        "storageSize" : 28672,

        "numExtents" : 4,

        "indexes" : 3,

        "indexSize" : 24528,

        "fileSize" : 67108864,

        "nsSizeMB" : 16,

        "extentFreeList" : {

                "num" : 0,

                "totalSize" : 0

        },

        "dataFileVersion" : {

                "major" : 4,

                "minor" : 22

        },

        "ok" : 1

}

6、查看mongodb服务器的状态

> db.serverStatus()


六、MongoDB创建集合


语法:db.cretateCollection(name,option)

> use mydb

switched to db mydb

> db.createCollection('myclo',{capped:true,autoIndexID:true,size:6142800,max:10000})

{ "ok" : 1 }

语法说明

name:集合的名字

option:用来配置集合的参数(都为可选)

1)capped true/false:如果为true,则启用封顶集合,封顶集合是固定大小的集合,当它达到其最大值,会自动覆盖最早的条目;如果为false,则也需要指定尺寸参数。

2)autoIndexID true/false:如果为true,自动创建索引_id字段的默认值是false。

3)size:指定最大大小字节封顶集合;如果封顶是true,那么还需指定这个字段,单位为B。

4)max:指定封顶集合允许在文件的最大数量。


七、MongoDB数据管理


1、查看集合

> show collections                   //也可以使用show tables

myclo

system.indexes

2、插入文档数据

> db.Account.insert({AccountID:1,UserName:"123",password:"123456"})

WriteResult({ "nInserted" : 1 })

> db.Account.insert({AccountID:2,UserName:'aaa',password:'123456'})

WriteResult({ "nInserted" : 1 })

注意:如果Account集合不存在,直接插入数据,mongodb会自动创建该集合

3、更新文档数据

> db.Account.update({AccountID:1},{"$set":{"Age":20}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4、查看所有文档

> db.Account.find()

{ "_id" : ObjectId("5666000a6ee7f810bc23f731"), "AccountID" : 1, "UserName" : "123", "password" : "123456", "Age" : 20 }

{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }

5、根据条件查询文档

> db.Account.find({AccountID:2})

{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }

> db.Account.find({"UserName":"aaa"})

{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }

6、根据条件删除文档

> db.Account.remove({AccountID:1})

WriteResult({ "nRemoved" : 1 })

> db.Account.find()

{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }

7、删除集合

> db.Account.drop()

true

> show collections

myclo

system.indexes

8、查看集合状态

> use mydb                                 //先进入该库

switched to db mydb

> db.printCollectionStats()

myclo

{

        "ns" : "mydb.myclo",

        "count" : 0,

        "size" : 0,

        "numExtents" : 1,

        "storageSize" : 6144000,

        "lastExtentSize" : 6144000,

        "paddingFactor" : 1,

        "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",

        "userFlags" : 1,

        "capped" : true,

        "max" : 10000,

        "maxSize" : 6144000,

        "nindexes" : 1,

        "totalIndexSize" : 8176,

        "indexSizes" : {

                "_id_" : 8176

        },

        "ok" : 1

}

---

system.indexes

{

        "ns" : "mydb.system.indexes",

        "count" : 1,

        "size" : 112,

        "avgObjSize" : 112,

        "numExtents" : 1,

        "storageSize" : 8192,

        "lastExtentSize" : 8192,

        "paddingFactor" : 1,

        "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",

        "userFlags" : 0,

        "capped" : false,

        "nindexes" : 0,

        "totalIndexSize" : 0,

        "indexSizes" : {


        },

        "ok" : 1

}

---



参考文章

MongoDB用户与角色管理的介绍:http://bbs.51cto.com/thread-1146654-1.html



相关内容

热门资讯

徐巧芯剖析赖清德:最怕自己丢掉... 海峡导报综合报道 大罢免投票一周年纪念活动26日举行,台北市长蒋万安出席并怒轰,民进党一年过后仍没有...
中国红十字会总会紧急向广东调拨... 记者从中国红十字会总会了解到,针对台风“红霞”给广东造成的灾情,中国红十字会总会启动四级应急响应,紧...
这些少年,正被“毒蛋”围猎 李梦抽了几口电子烟,吐出了白色的烟雾,有一股浓烈的水果香味。随后,她看着自己握电子烟的手,跟身边人说...
蒋万安号召“倒阁”,卢秀燕认为... 海峡导报综合报道 台北市长蒋万安27日抛出震撼议题,表示多名民代向他提议推动“倒阁”,要求台行政机构...
特朗普将在白宫会见两位重要客人 俄乌战争仍未结束,美伊冲突又有升级风险。在此背景下,美国总统特朗普将在白宫接见乌克兰和以色列领导人。...
新租客打扫卧室柜子上掉落4万元... 近日,莲前西路某小区内,张倩签下一套房子的租赁合同。当天上午,她带着12岁的大女儿周馨怡和11岁的小...
六部门通告:禁止涉军队退役报废... 关于禁止涉军队退役报废装备销售活动的通告近年来,部分经营者在线上线下公开销售涉及我军退役报废装备(指...
九寨沟景区发生泥石流,部分道路... 7月26日,九寨沟风景名胜区管理局发布泥石流灾害通报:2026年7月26日15时50分,九寨沟景区局...
空调26度不凉是什么原因 从空调内部元器件来说,不凉的原因有可能是温度传感器出现故障了,也有可能是空调压缩机或者铜管出现问题,...
鲸鸿动能携手香港国际机场、鸿蒙...   2026 年 7 月 25 日,十余位鸿蒙车主组成的车队从珠海出发,经港珠澳大桥通关抵达香港国际...