MongoDB 学习笔记
趁着劳动节摸鱼,赶紧整理一下差点扔到垃圾桶的发黄的学习 MongoDB 的笔记本。在整理的过程中,我发现许多旧的东西都不适用,自己的记忆也比较零散,因此重新学习了一遍。
安装
因为 MongoDB 在 Centos 上的安装比较简单,具体做法就是 添加源 > 下载安装 > 创建配置文件 > 打开防火墙,因此下文描述尽量从简。
- 添加来源 & 下载安装
首先在 这个链接 中找到你要下载的版本,然后创建/etc/yum.repos.d/mongodb-org-3.4.repo
文件并将官方文档给出的内容写入,然后刷新 Repo 缓存一条龙服务之后,输入yum install -y mongodb-org
进行安装。 - 创建配置文件
在经常路过的地方(误),创建一个名为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
- 打开防火墙
如果防火墙使用的是 Firewalld,则应当在命令行输入:
如果是Iptables,则应当修改配置文件,或在命令行输入:# firewall-cmd --zone=public --add-port=27017/tcp
比较神奇的是,iptables 在 centos7 中依旧使用 service 而非 systemctl 。# iptables -A INPUT -p tcp --dport 27017-j ACCEPT # iptables -A OUTPUT -p tcp --sport 27017-j ACCEPT # service iptables save
安装 IntelliJ IDEA 插件
- 网络设置
首先打开 IDE,然后File > Appearance & Behavior > System Settings > HTTP Proxy
进入代理设置界面。
选择 Manual proxy configuration ,连接方式选择 HTTP ,Hostname & Port number 填写127.0.0.1
,1080
。设置完成之后,点击 Check connection 随便填写一个能访问的网址,如果没有报错就算是成功了。 - 安装插件
关闭设置网络的界面,然后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会产生一个全局锁,数据量越大,复制时间越久,全局锁时间就越长。因此在生产环境中,可以考虑使用mongoexport
和mongoimport
进行数据表的复制操作。可视化界面
正如 MySQL 有 MySQL-Front ,Redis 有 Redis Desktop Manager 一样,MongoDB也拥有诸如 Robomongo的数据库,在此不作评论。
评论
发表评论