MongoDB 学习笔记

趁着劳动节摸鱼,赶紧整理一下差点扔到垃圾桶的发黄的学习 MongoDB 的笔记本。在整理的过程中,我发现许多旧的东西都不适用,自己的记忆也比较零散,因此重新学习了一遍。

安装

因为 MongoDB 在 Centos 上的安装比较简单,具体做法就是 添加源 > 下载安装 > 创建配置文件 > 打开防火墙,因此下文描述尽量从简。
  1. 添加来源 & 下载安装
    首先在 这个链接 中找到你要下载的版本,然后创建/etc/yum.repos.d/mongodb-org-3.4.repo文件并将官方文档给出的内容写入,然后刷新 Repo 缓存一条龙服务之后,输入 yum install -y mongodb-org进行安装。
  2. 创建配置文件
    在经常路过的地方(误),创建一个名为 mongodb.conf 的配置文件,填入以下内容:
    port=27017 #端口  
    dbpath= /usr/mongodb/db #数据库存文件存放目录  
    logpath= /usr/mongodb/mongodb.log #日志文件存放路径  
    logappend=true #使用追加的方式写日志  
    fork=false #不以守护程序的方式启用,即不在后台运行  
    maxConns=100 #最大同时连接数  
    noauth=true #不启用验证  
    journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
    #即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
    storageEngine=wiredTiger  #存储引擎有mmapv1、wiretiger、mongorocks
    bind_ip = 0.0.0.0  #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
    
    保存。然后输入命令启动 mongod -f mongodb.conf
  3. 打开防火墙
    如果防火墙使用的是 Firewalld,则应当在命令行输入:
    # firewall-cmd --zone=public --add-port=27017/tcp
    
    如果是Iptables,则应当修改配置文件,或在命令行输入:
    # iptables -A INPUT -p tcp --dport 27017-j ACCEPT
    # iptables -A OUTPUT -p tcp --sport 27017-j ACCEPT
    # service iptables save
    
    比较神奇的是,iptables 在 centos7 中依旧使用 service 而非 systemctl 。

安装 IntelliJ IDEA 插件

  1. 网络设置
    首先打开 IDE,然后 File > Appearance & Behavior > System Settings > HTTP Proxy进入代理设置界面。
    选择 Manual proxy configuration ,连接方式选择 HTTP ,Hostname & Port number 填写 127.0.0.11080。设置完成之后,点击 Check connection 随便填写一个能访问的网址,如果没有报错就算是成功了。
  2. 安装插件
    关闭设置网络的界面,然后 Plugins > Browse Repositories进入插件安装界面,在搜索栏输入Mongo,点击 Install 即可。

示例:使用 pymongo 连接 MongoDB数据库

首先你需要一个数据源,比如我拿的这个 Sonnet18(有删减),这个系列大概是英语专业的噩梦吧…
A:Shall I compare thee to a summer's day?
B:Thouart more lovely and more temperate.
A:Rough winds do shake the darling buds of May,
B:And summer's lease hath all too short a date.
C:Sometime too hot the eye of heaven shines,
D:And often is his gold complexion dimm'd;
C:And every fair from fair sometime declines,
D:By chance or nature's changing course untrimmed.
E:But thy eternal summer shall not fade,
F:Nor lose possession of that fair thou ow'st;
E:Nor shall Death brag thou wander'st in his shade,
F:When in eternal lines to time thou grow'st.
G:So long as men can breathe, or eyes can see,
G:So long lives this, and this gives life to thee.
有了这份尽量像数据的东西之后,卷起袖子撸代码吧:
import pymongo
# 连接数据库
client = pymongo.MongoClient('127.0.0.1', 27017)
# 给数据库命名
cubatDB = client['cubatDB']
# 增加一个工作表
sheet_tab = cubatDB['sheet_tab']
# =========================== 数据源操作 ===========================
# 插入数据
path = 'Sonnet18.txt'
with open(path, 'r') as af:
    lines = af.readlines()
    for index, line in enumerate(lines):
        data = {
            'index':index,
            'line':line,
            'words':len(line.split())
        }
        sheet_tab.insert_one(data)
# =========================== 数据库查询 ===========================
for item in sheet_tab.find({'words':{'$gt':5}}):
    print(item['line'])
值得一提的是,数据库查询用的是 Find 方法,如果要用到比较,另外也支持lt小于,lte小于等于和 gte 大于等于。

常用操作命令

使用 mongod 启动数据库之后,输入mongo 即可进入数据库的交互式界面,因此:
  • show dbs 显示目前所有的数据库
  • use DB_NAME 进入指定的数据库
  • show tables 显示当前数据库中的所有表
  • db createCollection('TABLE_NAME') 创建一个新的表
  • db.collection.copyTo(NEW_TABLE)将内容复制到新的表中
【注意】 使用copyTo方法将数据复制到新的表中时,MongoDB会产生一个全局锁,数据量越大,复制时间越久,全局锁时间就越长。因此在生产环境中,可以考虑使用mongoexportmongoimport 进行数据表的复制操作。

可视化界面

正如 MySQL 有 MySQL-Front ,Redis 有 Redis Desktop Manager 一样,MongoDB也拥有诸如 Robomongo的数据库,在此不作评论。

参考资料

评论