详解MongoDB安装以及基本操作

简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB特点

  • 面向集合存储,易存储对象类型的数据
  • 模式自由
  • 支持动态查询
  • 支持完全索引,包含内部对象
  • 支持查询
  • 支持复制和故障恢复
  • 使用高效的二进制数据存储,包括大型对象(如视频等)
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言
  • 文件存储格式为BSON(一种JSON的扩展)
  • 可通过网络访问

MongoDB常用的数据类型

数据类型 描述
String 字符串,字符集UTF-8
Integer 整型数值
Boolean 布尔值类型(真/假)
Double 双精度浮点值
Arrays 数组
Object 用于内嵌文档
Null 用于创建空值
Date 日期时间
Binary Data 二进制数据

内置数据库用户角色

1、数据库用户角色
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
2、数据库管理员角色
dbAdmin:允许用户进行索引创建、删除,查看统计或访问system.profile,但没有角色和用户管理的权限
userAdmin:提供了在当前数据库中创建和修改角色和用户的能力
dbOwner: 提供对数据库执行任何管理操作的能力。这个角色组合了readWrite、dbAdmin和userAdmin角色授予的特权。
3、集群管理角色
clusterAdmin : 提供最强大的集群管理访问。组合clusterManager、clusterMonitor和hostManager角色的能力。还提供了dropDatabase操作
clusterManager : 在集群上提供管理和监视操作。可以访问配置和本地数据库,这些数据库分别用于分片和复制
clusterMonitor : 提供对监控工具的只读访问,例如MongoDB云管理器和Ops管理器监控代理。
hostManager : 提供监视和管理服务器的能力。
4、备份恢复角色
backup : 提供备份数据所需的能力,使用MongoDB云管理器备份代理、Ops管理器备份代理或使用mongodump
restore : 提供使用mongorestore恢复数据所需的能力
5、所有数据库角色
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
6、超级用户角色
root:提供对readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup的所有资源的访问
7、内部角色
__system : 提供对数据库中任何对象的任何操作的特权

实验环境

系统环境:CentOS7.4
Server端IP地址:192.168.100.76
MongoDB版本:3.6.7

搭建步骤

一、安装MongoDB

1、自定义yum源文件

[[email protected]_6 ~]# cd /etc/yum.repos.d/
[[email protected]_6 yum.repos.d]# mkdir bak
[[email protected]_6 yum.repos.d]# mv CentOS-* bak/ #备份yum源
[[email protected]_6 yum.repos.d]# vim local.repo

[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

[[email protected]_6 ~]# yum clean all #清除yum缓存
[[email protected]_6 ~]# yum list #重新加载源

3、编辑主配置文件

[[email protected]_6 ~]# vim /etc/mongod.conf

#编辑以下参数
net:                #约28行左右,指定网卡借接口
  port: 27017       #监听端口(默认监听端口)
  bindIp: 0.0.0.0   #监听地址(编辑地址为任意网段)

4、启动服务

[[email protected]_6 ~]# systemctl start mongod.service
[[email protected]_6 ~]# netstat -antp | grep ‘27017‘

二、开启多实例

[[email protected]_6 ~]# cp -p /etc/mongod.conf /etc/mongod2.conf
[[email protected]_6 ~]# vim /etc/mongod2.conf

#编辑以下参数
systemLog:
   path: /data/logs/mongodb/mongodb2.log #约第10行,编辑日志文件路径
storage:
    dbPath: /data/mongodb/mongodb2           #约第14行,编辑数据目录路径
net:
   port: 27018                                               #约第29行,编辑监听端口

[[email protected]_6 ~]# mkdir -p /data/mongodb/mongodb2 #创建数据目录
[[email protected]_6 ~]# mkdir -p /data/logs/mongodb #创建日志目录
[[email protected]_6 ~]# touch /data/logs/mongodb/mongodb2.log #创建日志文件
[[email protected]_6 ~]# chmod 777 /data/logs/mongodb/*.log #修改目录权限
[[email protected]_6 ~]# mongod -f /etc/mongod2.conf #启动多实例
[[email protected]_6 ~]# mongo --port 27018 #连接数据库

三、基本操作

[[email protected]_6 ~]# mongo

> db.version();       #显示版本信息
3.6.7
> show dbs;           #显示所有数据库
admin  0.000GB
local  0.000GB
> db.getMongo();   #显示当前数据库连接地址
connection to 127.0.0.1:27017

四、数据库常用操作

1、创建数据库

> use firstdb  //注意使用"use"命令不存在会创建数据库,不建立集合又会删除**
switched to db firstdb
> db
firstdb
> show dbs    //刚刚添加的"firstdb"数据库并未在数据库列表中
admin   0.000GB
config  0.000GB
local   0.000GB
> db.firstdb.insert({"name":"tom"}) //插入数据
WriteResult({ "nInserted" : 1 })
> show dbs;                         //插入数据之后,相应的库显示出来了
admin    0.000GB
config   0.000GB
firstdb  0.000GB
local    0.000GB

2、删除数据库

> show dbs;
admin    0.000GB
config   0.000GB
firstdb  0.000GB
local    0.000GB
> use firstdb           //首先进入指定的数据库
switched to db firstdb
> db.dropDatabase()     //删除进入的数据库
{ "dropped" : "firstdb", "ok" : 1 }
> show dbs;             //查看"firstdb"已经被删除
admin   0.000GB
config  0.000GB
local   0.000GB
> 

3、创建集合

1).普通创建集合

> use test                       //创建或指定相关的数据库
switched to db test
> db.createCollection("runoob")  //创建指定集合"runoob"
{ "ok" : 1 }
> show collections               //查看集合
runoob

2).使用关键参数创建集合
参数详解

字段 类型 描述
capped 布尔 (可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为true时,必须指定size参数
size 数值 (可选)为固定集合指定一个最大值(以字节计)。如果capped为true,也需要指定该字段
max 数值 (可选)指定固定集合中包含文档的最大数量
> use test
switched to db test
> db.createCollection("mycol",{capped:true,size:6142800,max:10000}) //创建固定集合 mycol,整个集合空间大小 6142800KB,文档最大个数为10000个
{ "ok" : 1 }

3).直接插入数据,系统自动创建集合

> use test
switched to db test
> db.mycol2.insert({"name" : "tom"}) //创建集合
WriteResult({ "nInserted" : 1 })
> show collections;
mycol
mycol2
runoob

4、删除集合

> use test
switched to db test
> show collections
mycol
mycol2
runoob
> db.mycol2.drop()      //删除mycol2集合
true

5、插入文档

1).直接插入数据

> use test
switched to db test
> show collections
mycol
runoob
> db.col.insert({title:‘MongoDB教程‘,description:‘MongoDB是一个Nosql数据库‘,tags: [‘mongodb‘, ‘database‘, ‘NoSQL‘]})         //插入数据
WriteResult({ "nInserted" : 1 })
> db.col.find()    //查看插入数据
{ "_id" : ObjectId("5b9230733a06412f2eef4fbc"), "title" : "MongoDB教程", "description" : "MongoDB是一个Nosql数据库", "tags" : [ "mongodb", "database", "NoSQL" ] }

2).引用变量插入数据

> document=({name:‘tom‘,address:‘KunMing‘,tel:‘13811112222‘})      //将数据赋值给变量
{ "name" : "tom", "address" : "KunMing", "tel" : "13811112222" }
> typeof(document.name)                                            //查看字段类型
string
> db.users.insert(document)                                        //插入数据
WriteResult({ "nInserted" : 1 })
> db.users.find()                                                  //查看插入数据
{ "_id" : ObjectId("5b9231db3a06412f2eef4fbd"), "name" : "tom", "address" : "KunMing", "tel" : "13811112222" }

6、更新文档

> db.users.find().pretty()
{
    "_id" : ObjectId("5b9231db3a06412f2eef4fbd"),
    "name" : "tom",
    "address" : "KunMing",
    "tel" : "13811112222"
}
> db.users.update({‘name‘:‘tom‘},{$set:{‘name‘:‘Jack‘}});     //将"tom"改成"Jack"
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find().pretty()
{
    "_id" : ObjectId("5b9231db3a06412f2eef4fbd"),
    "name" : "Jack",                                          //查看修改成功
    "address" : "KunMing",
    "tel" : "13811112222"
}

7、删除文档

> db.users.find()
{ "_id" : ObjectId("5b9231db3a06412f2eef4fbd"), "name" : "Jack", "address" : "KunMing", "tel" : "13811112222" }> db.users.remove({‘name‘:‘Jack‘})                            //删除"name"为"Jack"这一条数据
WriteResult({ "nRemoved" : 1 })
> db.users.find()

五、数据导入与导出

1、创建测试数据

> use test
switched to db test
> for(var i=1;i<=100;i++)db.student.insert({"id":i,"name":"tom"+i})   //循环写入测试数据
WriteResult({ "nInserted" : 1 })
> db.student.count()    //查看集合的条目数
100

2、导出数据

[[email protected]_6 ~]# mongoexport -d test -c student -o /opt/test_student.json

参数详解:

-d:指定数据库名称
-c:指定collection的名字
-f:指定要导出哪些列
-o:指定要导出的文件名
-q:指定导出数据的过滤条件

[[email protected]_6 ~]# ll /opt/

3、导入数据

> use test
switched to db test
> db.student.drop()       //删除集合
true
>  

[[email protected]_6 ~]# mongoimport -d test -c student1 --file /opt/test_student.josn #导入数据

> use test
switched to db test
> db.student1.count()     //查看数据导入成功
100
> 

4、条件筛选导出数据

[[email protected]_6 ~]# mongoexport -d test -c student1 -q ‘{"id":{"$eq":10}}‘ -o /opt/test_stuone.json #筛选导出"id"等于10的条目
[[email protected]_6 ~]# cat /opt/test_stuone.json

六、数据备份与恢复

1、数据备份

[[email protected]_6 ~]# mkdir /backup #创建存放备份数据目录
[[email protected]_6 ~]# mongodump -d test -o /backup/ #备份"test"数据库至backup目录下

参数详解

-h:MongoDB所在服务器IP地址
-d:需要备份的数据库实例
-o:备份的数据存放的位置

[[email protected]_6 ~]# cd /backup/test/ #进入备份目录
[[email protected]_6 test]# ls

2、数据恢复

[[email protected]_6 ~]# mongorestore -d test1 --dir=/backup/test/ #恢复数据,指定数据库为"test1"

> show dbs;               //查看数据库
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
test1   0.000GB
> use test1               //进入"test1"数据库
switched to db test1
> show collections        //查看集合已经导入成功
col
mycol
runoob
student
student1
users
> 

七、复制数据库

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> db.copyDatabase("test","test2","localhost") //复制数据库
{ "ok" : 1 }
> show dbs
admin   0.000GB4
config  0.000GB
local   0.000GB
test    0.000GB
test2   0.000GB
> 

八、克隆集合

[[email protected]_6 ~]# mongod -f /etc/mongod2.conf #开启第二个实例
[[email protected]_6 ~]# netstat -anpt | grep -E ‘27017|27018‘

[[email protected]_6 ~]# mongo --port 27018 #登陆第二个实例

> db.runCommand({"cloneCollection":"test.users","from":"192.168.100.76:27017"})//将27017端口的集合复制到27018上
{ "ok" : 1 }
> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> use test
switched to db test
> show collections    //查看复制成功
users

九、安全管理

1、添加授权用户

[[email protected]_6 ~]# mongo

> use admin
> db.createUser({user: "myUserAdmin",pwd: "abc123",roles: [{role:"userAdminAnyDatabase",db:"admin"}]})   //在admin数据库中添加具有userAdminAnyDatabase角色的用户
> exit

2、编辑实例1主配置文件

[[email protected]_6 ~]# vim /etc/mongod.conf #实例1

net:
  port: 27017                      //监听端口
  bindIp: 0.0.0.0                  //监听地址
security:                          //约33行,打开注释
  authorization: enabled           //添加认证。注意冒号后面需要空一格

3、重启服务

[[email protected]_6 ~]# mongod -f /etc/mongod.conf -shutdown #停止第一个实例
[[email protected]_6 ~]# mongod -f /etc/mongod.conf #启动第一个实例

4、登录验证

[[email protected]_6 ~]# mongo

[[email protected]_6 ~]# mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin" #在admin数据库中添加具有userAdminAnyDatabase角色的用户

> use admin
> db.auth("myUserAdmin", "abc123" )

5、进程管理

> db.currentOp()  //查看当前正在运行的进程的命令
"opid" : 1580,    //注意其中有一个参数是进程号
> db.killOp(1580) //结束进程
{ "info" : "attempting to kill op", "ok" : 1 }

十、MongoDB监控

> db.serverStatus()  //查看数据库实例的状态信息
> db.stats()         //查看当前数据库的统计信息

[[email protected]_6 ~]# vim /etc/mongod.conf
httpinterface=true //3.6之后无此功能

原文地址:http://blog.51cto.com/11905606/2174179

时间: 2024-09-28 15:39:33

详解MongoDB安装以及基本操作的相关文章

Windows下图文详解Mongodb安装及配置

这两天接触了MongoDB数据库,发现和mysql数据库还是有很大差别的,同时使用前的配置看起来有些繁杂,踩过不少坑,其实只要一步一步搞清了,并不难. 接下来,我就整理下整个安装及配置过程. 安装的Mongodb版本: mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed.msi 电脑信息:win10  64位 一.安装 安装其实很简单,一路next,选择custom,不然无法继续 我是默认的安装位置:C:\Program Files\MongoDB,你

详解Linux安装GCC

为你详解Linux安装GCC方法 2009-12-11 14:05 佚名 博客园 字号:T | T 现在很多程序员都应用GCC,怎样才能更好的应用GCC.本文以在Redhat Linux安装GCC4.1.2为例(因在项目开发过程中要求使用,没有用最新的GCC版本),介绍Linux安装GCC过程 AD:51CTO学院:IT精品课程在线看! 现在很多程序员都应用GCC,怎样才能更好的应用GCC.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择

RPM命令详解(安装、升级、卸载)

RPM命令详解(安装.升级.卸载) rpm 常用命令1.安装一个包# rpm -ivh 2.升级一个包# rpm -Uvh 3.卸载一个包# rpm -e 4.安装参数--force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装. 5.查询一个包是否被安装# rpm -q < rpm package name> 6.得到被安装的包的信息# rpm -qi < rpm package name> 7.列出该包中有哪些文

详解MyEclipse10 安装Spket 1.6.23(支持Extjs4.1.1及jQuery1.8)

用MyEclipse10安装Spket主要有3种方式:在线下载更新.下载Zip覆盖.下载jar包安装.我用在线安装尝试了N次终于还是失败,只好下载jar包来安装,在失败了M次之后终于安装成功,现在网上这方面的讲解还是比较少的(很多还都是乱讲的),我把我安装的过程整理了下,希望大家都能成功...   一.首先到spket官网下载最新的jar安装包(当前最新的是spket 1.6.23) spket官网下载地址:http://www.spket.com/download.html   二.下载spk

Android SDK离线安装方法详解(加速安装)

AndroidSDK在国内下载一直很慢··有时候通宵都下不了一点点,最后只有选择离线安装,现在发出离线安装地址和方法,希望对大家有帮助 一,首先下载SDK的安装包,android-sdk_r10-windows.zip(安装工具)解压到目录,如我的目录D:\programs\android-sdk-windows 下载地址:http://dl.google.com/android/android-sdk_r10-windows.zip(目前最新版) 二,然后新建以下 几个文件夹 platform

PHP源代码加密软件工具zend guard 使用教程及免费下载功能详解loader 安装破解

原文来自龙博方案网http://www.fanganwang.com/product/1368 Zend Guard?,以前称为的 Zend 编码器,从逆向工程,未经许可定制,无牌使用和再分配方面保护您的商业 PHP 4和 PHP 5应用. Zend Guard?,倾向前身 Zend 编码器,许独立软件供应商(ISVs)和 IT 经理们安全地和自信地分配和管理他们的 PHP 应用的开发,同时己的源代码. Zend Guard? 不仅能编码你们应用软件的源代码,而且还通过不同的应用组件名称的困惑来

nginx高性能web服务器详解(1)--安装nginx

1. 下载 本次使用nginx-0.1.2.3 版本,下载地址 http://nginx.org/en/download.html  新发布版本 http://nginx.org/download  历史版本 2.上传到linux服务器 sz -bey nginx-0.1.2.3.tar.gz 3.解压 3.1 建立目录  mkdir nginx_123 3.2 解压 tar -zxvf nginx-0.1.2.3.tar.gz ./nginx_123/ 4.配置编译环境 nginx源代码的编译

详解Samba安装和配置文件

详解Samba安装和配置文件 一.samba简介 samba的功能很简单,就是为了使linux和windows之间能够实现共享.并且利用samba搭建文件服务器,不仅比windows功能强大,而且访问速度快.安全.samba服务器具有这么多优点,看来学习搭建samba是网管必须的任务了.首先说明,samba服务器需要两个守护进程:smbd和nmbd.smbd进程监听139TCP端口,处理到来的SMB数据包:nmbd进程监听137.138UDP端口,使其他主机能浏览linux服务器. 二.samb

MYSQL之数据库初识、安装详解、sql语句基本操作

目录 MYSQL之数据库初识及安装详解 1.什么是数据库? 1.什么是数据?(data) 2.什么是数据库?(databases,简称DB) 2.为什要用数据库? 3.什么是数据库管理系统?(DataBase Management System 简称DBMS) 4.数据库管理软件的分类 5.MYSQL数据库 6.数据库服务器.数据管理系统.数据库.表记录之间的关系 MYSQL的安装 下载及启动 配置环境变量及作系统服务 修改密码 破解密码 配置文件 数据库的基本操作 MYSQL之数据库初识及安装