每天一篇,学习业内领先的NoSQL数据库=》MongoDB

MongoDB简介:

MongoDB是一款跨平台、面向文档的数据库,可以实现高性能、高可用性,并且能够轻松扩展.

MongoDB也是一个介于非关系数据库和关系数据库之间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的.

运行方式主要基于两个概念:集合与文档

MongoDB的特点:

1、安装简单,提供了面向文档存储功能

2、提供了复制、高可用性和自动分片功能

3、支持丰富的查询表达式,查询指令使用JSON形式的标记

4、支持各种编程语言:Ruby、Pathon、Java、C++、PHP、c#等

下面我在Centos7安装MongoDB并演示相关的各种基础操作

一、安装MongoDB

(1)配置YUM源仓库
[[email protected] ~]#cd /etc/yum.repos.d/
[[email protected] yum.repos.d]#vim mongodb.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
(2)安装MongoDB
[[email protected] yum.repos.d]#yum list   //测试
[[email protected] ~]#yum  install -y mongodb-org
[[email protected] ~]#vi /etc/mongod.conf
bindIp: 0.0.0.0             #监听地址
port: 27017                 #监听端口
[[email protected] ~]#systemctl start mongod.service
[[email protected] ~]#netstat -anpt | grep 27017
tcp          0          0 0.0.0.0:27017           0.0.0.0:*
    LISTEN          44010/mongod

[[email protected] ~]#/usr/bin/mongo
>db.version()                //查看版本信息
>show dbs
admin 0.0000GB
local 0.0000GB
> DB.getMongo()
2018-07-16T16:10:27.899+0800 E QUERY    [thread1] TypeError: DB.getMongo is not a function :
@(shell):1:1

二、启动MongoDB多实例

[[email protected] ~]# cp -p /etc/mongod.conf /etc/mongod2.conf
[[email protected] ~]# vim /etc/mongod2.conf
path: /data/mongodb/mongod2.log          //日志位置
dbPath: /data/mongodb/mongo              //存储路径
port: 27018                              //端口号
[[email protected] ~]# mkdir -p  /data/mongodb/
[[email protected] ~]# cd /data/mongodb/
[[email protected] mongodb]# mkdir mongo
[[email protected] mongodb]# touch mongod2.log
[[email protected] mongodb]# chmod 777 mongod2.log
[[email protected] mongodb]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 51823
child process started successfully, parent exiting
[[email protected] mongodb]# mongo --port 27018
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27018/
MongoDB server version: 3.6.6
Server has startup warnings:
2018-07-16T16:21:43.218+0800 I CONTROL  [initandlisten]
> exit
bye
[[email protected] mongodb]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      44010/mongod
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      51823/mongod
tcp        0      0 127.0.0.1:49076         127.0.0.1:27018         TIME_WAIT   -
tcp        0      0 192.168.200.184:22      192.168.200.1:60220

三、MongoDB基本操作

> use mydb                               //创建并打开mydb数据库
switched to db mydb
> a=db.info.find()                       //起别名
> db.createCollection(‘a‘)              //向mydb数据库添加集合a
{ "ok" : 1 }
> show collections                      //显示数据库中的所有集合
a
> typeof(a.id)                          //查看属性类型
2018-07-16T17:51:21.735+0800 E QUERY    [thread1] ReferenceError: a is not defined :
@(shell):1:1
> db.a.insert({"id":1,"name":"zhangsan","hobby":["game","talk","read"]})
WriteResult({ "nInserted" : 1 })
["game","talk","read"]                   //字符串数组  object(对象)
> db.a.find()                           //显示a集合中的所有文档
{ "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"), "id" : 1, "name" : "zhangsan", "hobby" : [ "game", "talk", "read" ] }
> db.a.insert({"id":2,"name":"lisi","hobby":["game","talk","read"]})
WriteResult({ "nInserted" : 1 })
> db.a.insert({"id":3,"name":"wangwu","hobby":["game","talk","read"]})
WriteResult({ "nInserted" : 1 })
> db.a.find()
{ "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"), "id" : 1, "name" : "zhangsan", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67c5bacc9efbe3a0d477"), "id" : 2, "name" : "lisi", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67ccbacc9efbe3a0d478"), "id" : 3, "name" : "wangwu", "hobby" : [ "game", "talk", "read" ] }
> db.a.findOne({"id":1})                //查找指定记录
{
    "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"),
    "id" : 1,
    "name" : "zhangsan",
    "hobby" : [
        "game",
        "talk",
        "read"
    ]
}
> db.a.update({"id":2},{$set:{"name":"xiaoqi"}})    //更改属性
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.a.find()
{ "_id" : ObjectId("5b4c58ddf7c9ed9a709175e9"), "id" : 1, "name" : "zhangsan", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67c5bacc9efbe3a0d477"), "id" : 2, "name" : "xiaoqi", "hobby" : [ "game", "talk", "read" ] }
{ "_id" : ObjectId("5b4c67ccbacc9efbe3a0d478"), "id" : 3, "name" : "wangwu", "hobby" : [ "game", "talk", "read" ] }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
mydb    0.000GB
> use mydb
switched to db mydb
> db.a.drop()                            //删除集合
true
> show collections
> db.dropDatabase()                      //删除数据库
{ "dropped" : "mydb", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

四、MongoDB日常维护

参数说明:

-d:指明数据库的名字

-c:指明集合的名字

-f:指明要导出哪些列

-o:指明要导出的文件名

-q:指明导出数据的过滤条件
(1)导入导出

使用mongoexport和mongoimport命令来导入导出MongoDB的数据

> use school
switched to db school
> db.createCollection(‘info‘)
{ "ok" : 1 }
> for(var i=1;i<=100;i++)db.info.insert({"id":i,"name":"jack"+i})
WriteResult({ "nInserted" : 1 })
> db.info.find()
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572da"), "id" : 1, "name" : "jack1" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572db"), "id" : 2, "name" : "jack2" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dc"), "id" : 3, "name" : "jack3" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dd"), "id" : 4, "name" : "jack4" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572de"), "id" : 5, "name" : "jack5" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572df"), "id" : 6, "name" : "jack6"
> db.info.count()                      //显示行数
100
[[email protected] ~]# mongoexport -d school -c info -o /opt/school.json  //这里注意导出的文件格式为*.json
c2018-07-16T22:13:22.668+0800   connected to: localhost
2018-07-16T22:13:22.675+0800    exported 100 records
[[email protected] ~]# cd /opt
[[email protected] opt]# ls
rh  school.json
[[email protected] opt]# vim school.json
[[email protected] opt]# mongoimport -d school -c test --file school.json
2018-07-16T22:15:22.523+0800    connected to: localhost
2018-07-16T22:15:22.700+0800    imported 100 documents
[[email protected] opt]# mongo
> use school
switched to db school
> show tables
info
test                          //导入文件test,是刚才导出的内容
> db.test.find()
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572da"), "id" : 1, "name" : "jack1" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572db"), "id" : 2, "name" : "jack2" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dc"), "id" : 3, "name" : "jack3" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572dd"), "id" : 4, "name" : "jack4" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572de"), "id" : 5, "name" : "jack5" }
{ "_id" : ObjectId("5b4ca7864f78ab07f2b572df"), "id" : 6, "name" : "jack6"
[[email protected] opt]# mongoexport -d school -c info -q ‘{               "id":{"$eq":10}}‘ -o /opt/top10.json    //筛选需要导出的行数,-q后面有空格
2018-07-16T22:20:20.610+0800    connected to: localhost
2018-07-16T22:20:20.636+0800    exported 1 record
[[email protected] opt]# cd /opt/
[[email protected] opt]# ls
rh  school.json  top10.json
[[email protected] opt]# vim top10.json 

{"_id":{"$oid":"5b4ca7864f78ab07f2b572e3"},"id":10.0,"name":"jack10"}
(2)备份与恢复

使用Mongodump命令来备份MongoDB数据

-h:MongoDB所在服务器地址

-d:需要备份的数据库实例

-o:备份数据存放的位置,该目录需提前创建
[[email protected] opt]# mkdir /backup
[[email protected] opt]# mongodump -d school -o /backup/       //备份
2018-07-16T22:43:29.828+0800    writing school.info to
2018-07-16T22:43:29.830+0800    writing school.test to
2018-07-16T22:43:29.836+0800    done dumping school.info (100 documents)
2018-07-16T22:43:29.838+0800    done dumping school.test (100 documents)
[[email protected] opt]# cd /backup/
[[email protected] backup]# ls
school
[[email protected] backup]# cd school/
[[email protected] school]# ls
info.bson  info.metadata.json  ==test.bson==  test.metadata.json
[[email protected] school]# mongorestore -d abc --dir=/backup/school/  //恢复  备注:这里的数据库abc会自动创建,所以可以不存在
2018-07-16T22:46:02.801+0800    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
(3)复制数据库
> show dbs
abc     0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB
school  0.000GB
> show dbs
abc     0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB
school  0.000GB
> db.copyDatabase("abc","abc1")               //复制数据库
{ "ok" : 1 }
> show dbs
abc     0.000GB
abc1    0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB
school  0.000GB
(4)创建管理用户
> use admin
> db.createUser({"user":"root","pwd":"123","roles":["root"]})
> db.auth("root","123")
(5)进程管理
> db.currentOp()          //查看进程
    "active" : true,
            "currentOpTime" : "2018-07-16T23:28:31.188+0800",
            "opid" : 19385,
            "secs_running" : NumberLong(0),
    > db.killOp(19385)
{ "info" : "attempting to kill op", "ok" : 1 }

原文地址:http://blog.51cto.com/13687553/2145096

时间: 2024-10-15 15:05:34

每天一篇,学习业内领先的NoSQL数据库=》MongoDB的相关文章

nosql数据库MongoDB的用法

MongoDB常用命令 1.启动命令 mongod 启动数据库进程 --dbpath 制定数据库的目录 --port 制定数据库的端口,默认是27017 --bind_ip 绑定IP --directoryperdb 为每个db创建一个独立子目录 --logpath 制定日志存放目录 --logappend 指定日志生成方式(追加/覆盖) 例如:mongod --dbpath db --port 27098 --directoryperdb --logpath db\logs\mongodb.l

NoSQL数据库 -- MongoDB

终于下定决心在某东购买了<python核心编程(二)>和<鸟哥linux,基础 (三)>.感觉学习linux最开始还是在虚拟机里面比较好,所以安装了VirtualBox,并下载了Cent OS 7. 安装完Cent OS发现完全没GUI啊,还好之前用了段时间的Ubuntu,感觉还好. (一) windows系统下面的安装 (1)下载,官网是 http://www.mongodb.org/ 不要去了 com那个.下载的2.4稳定版. (2)下载zip文件,然后解压.在D盘新建mong

《NOSQL数据库入门》学习笔记

<nosql数据库入门> 第1章 nosql数据库的基础知识 1 1.1 关系型数据库和nosql数据库 2 1.1.1 什么是nosql 2 1.1.2 关系型数据库简史 2 1.1.3 数据库的分类 3 1.1.4 关系型数据库的优势 5 1.1.5 关系型数据库的不足 5 1.1.6 nosql数据库 9 1.2 nosql数据库是什么 12 1.2.1 键值存储 13 1.2.2 面向文档的数据库 14 1.2.3 面向列的数据库 14 1.3 如何导入nosql数据库 16 1.3.

大数据挑战与NoSQL数据库技术pdf

下载地址:网盘下载 内容简介 编辑 <大数据挑战与nosql数据库技术>对大数据时代面临的挑战,以及nosql数据库的基本知识做了清晰的阐述,有助于读者整理思路,了解需求,并更有针对性.有选择地深入学习相关知识.[1] 目录 编辑 第1章概论1 1.1引子2 1.2大数据挑战3 1.3大数据的存储和管理5 1.3.1并行数据库5 1.3.2NoSQL数据管理系统6 1.3.3NewSQL数据管理系统8 1.3.4云数据管理11 1.4大数据的处理和分析11 1.5小结13 参考文献13 理论篇

NoSQL数据库探讨之一 - 为什么要用非关系数据库?

随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速.而传统的关系数据库在应付 web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如: 1.High performance - 对数据库高并发读写的需求 web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往 往要达到每秒上万次读写请求.

初识NoSQL 快速认识NoSQL数据库 分析Analytics For Hackers: How To Think About Event Data

做了一年的大一年度项目了,对于关系型数据库结构还是有些了解了,有的时候还是觉得这种二维表不是很顺手.在看过一篇文章之后,对NoSQL有了初步的了解,(https://keen.io/blog/53958349217/analytics-for-hackers-how-to-think-about-event-data).这边文章写的很好,确实写出来了在实际情况下NoSQL的“用武之地”,而且用了MineCraft作分析,但是也许不够全面.比如文章中只是提到了,entity数据用关系型怎么存,ev

HBase与MongDB等NoSQL数据库对比

转载请注明出处: jiq?钦's technical Blog - 季义钦 一.开篇 淘宝之前使用的存储层架构一直是MySQL数据库,配合以MongDB,Tair等存储. MySQL由于开源,并且生态系统良好,本身拥有分库分表等多种解决方案,因此很长一段时间内都满足淘宝大量业务的需求.但是由于业务的多样化发展,有越来越多的业务系统的需求开始发生了变化.一般来说有以下几类变化: (1)    数据量变得越来越多,事实上现在淘宝几乎任何一个与用户相关的在线业务的数据量都在亿级别,每日系统调用次数从亿

NoSQL数据库介绍(2)

2 NoSQL潮流 在这一章中,将一起讨论NoSQL潮流的动机和主要驱动力,以及NoSQL主张的批评和反馈.本章将通过不同的尝试得出结论来分类和描述NoSQL数据库.其中一个分类法将在随后的章节中被提出. 2.1 动机和主要驱动力 NoSQL这个词汇首先用在1998年对关系数据库排除SQL使用的论文([ Str10 ]).这个词在2009年再次被选出来,并用于非关系数据库拥护者(如Last.fm的开发者Jon Oskarsson,他组织了三藩的NoSQL见面会)的会议([ Eva09a ]).一

HBase与MongDB等NoSQL数据库对照

HBase概念学习(十)HBase与MongDB等NoSQL数据库对照 转载请注明出处: jiq?钦's technical Blog - 季义钦 一.开篇 淘宝之前使用的存储层架构一直是MySQL数据库,配合以MongDB,Tair等存储. MySQL因为开源,而且生态系统良好,本身拥有分库分表等多种解决方式,因此非常长一段时间内都满足淘宝大量业务的需求.可是因为业务的多样化发展,有越来越多的业务系统的需求開始发生了变化.一般来说有下面几类变化: (1)    数据量变得越来越多,其实如今淘宝