mongodb是非常好用的 NoSQL数据库,我一般用来做爬虫,特别方便好用。
mongodb 启动:
在Linux 系统中直接运行 bin 文件夹中的 mongod 就行了 。 如下是在 Windows 系统的批命令,其中.lock
文件是用来锁定数据使用,若上次非正常关闭,则需要删除此文件,否则会报错。
1 2 3 4 5 6 7 |
@echo off echo 开启mongodb中,等待ing... if exist C:\A@常用\PythonDir\mongoDB\mongodb-win32-i386-2.0.4\data\db\mongod.lock (del C:\A@常用\PythonDir\mongoDB\mongodb-win32-i386-2.0.4\data\db\mongod.lock) else (echo 未发现lock文件) ::进入c盘 cd C:\A@常用\PythonDir\mongoDB\mongodb-win32-i386-2.0.4\bin mongod --dbpath "C:\Python\MongoDB\data" pause |
mongodb 数据的导入导出
1 2 3 4 5 6 7 |
# mongoexport导出文件格式支持csv和json,不同的是csv格式必须显示的指定要导出的字段,如: mongoexport -d database -c collections -o d:/a.csv -csv -f name,type #而json格式则不需要 mongoexport -d database -c collections -o D:/学习/rbac/rbac/a.json --json # 将a.csv里的数据导入到database 数据库中的collections 表中,如果不存在则自动创建 mongoimport -d database -c collections --file D:/a.csv --headerline --upsert |
mongodb 的查询操作
1 2 3 4 5 |
# 查询唯一值数据--类似于关系型数据库中的select distinct db.<collection_name>.distinct("<field_name>") # 查询唯一值的数量 db.<collection_name>.distinct("<field_name>").length |
MongoDB 删除已有字段
1 |
db.yourcollection.update({},{$unset:{"需要删除的字段":""}},false,true) |
MongoDB 查询结果插入到 collection
1 2 |
var result = db.getCollection('zhaopin_20190123').find({}) while(result.hasNext()) db.新建表名.insert(result.next()) |
MongoDB 插入数据到新 collection
1 2 |
var result = db.getCollection('zhaopin_20190123').find({}) while(result.hasNext()) db.新建表名.insert(result.next()) |
MongoDB 数据备份及恢复
1 2 3 4 5 |
# 备份 mongodump -h dbhost -d dbname -o dbdirectory # 恢复 mongorestore -h <hostname><:port> -d dbname <path> |
MongoDB 根据已有字段更新新字段(借助 Python)
1 2 3 4 5 6 7 8 9 10 11 |
# 这里使用的是mongodb的更新功能,而判断部分使用Python client = pymongo.MongoClient(host=MONGO_URL, port=27017) data= list(<collection_name>.find()) for i in data: d = dict(i) if 'test' not in d.keys(): d['test'] = d['_id'] <collection_name>.update(dict(i), d, True) print(d) |
MongoDB 的远程连接
MongoDB 的服务器端设置,包括端口打开、开启服务器、新建用户操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 首先需要开启服务器的27017端口,确保本地计算机可连接到远程服务器 # 开启远程服务器Mongod,bind_ip确保所有ip均可访问,--auth开启用户访问验证 ./mongod --bind_ip 0.0.0.0 --auth # 新建MongoDB的用户名,用来远程登录验证用 db.createUser( { user: "xxxx", pwd: "xxxx", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWrite", db: "blog" } ] } ) |
本地 MongoDB 连接远程 Mongodb 服务器
1 |
mongo <ip>:<port> -u <user_name> -p <password> |
MongoDB 远程访问的防火墙设置
由于只是个人使用,采用授权 Auth 的方式不太方便,而bind_ip 0.0.0.0
的话,存在数据安全风险。这里采用另一折中的方法,仍bind_ip 0.0.0.0
,但设置防火墙,仅对指定的 IP 开放 27017 端口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Linux 防火墙端口 (iptables) 查看防火墙状态: service iptables status 开启防火墙(重启后永久生效):chkconfig iptables on 关闭防火墙(重启后永久生效):chkconfig iptables off 开启防火墙(即时生效,重启后失效):service iptables start 关闭防火墙(即时生效,重启后失效):service iptables stop 重启防火墙: /etc/init.d/iptables restart Linux 防火墙(使用systemctl) 查看防火墙状态:systemctl list-unit-files|grep firewalld.service 关闭防火墙:systemctl stop firewalld.service #停止firewall 禁止firewall开机启动:systemctl disable firewalld.service 开放端口:firewall-cmd --zone=public --add-port=123456/tcp --permanent |
开启特定 IP 的某个端口,按照如下步骤:
- 编辑
/etc/sysconfig/iptables
(开启 6379 端口);
1 |
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 6379 --state NEW -j ACCEPT |
如果有访问 ip 限制,就添加-s ip
地址了
- 重启防火墙
1 |
/etc/init.d/iptables restart |
(2)除了在Linux命令行中设置,在阿里云服务器的安全规则中也可直接设置。
这里推荐关闭Linux服务器的防火墙,使用阿里云的安全组,更加方便!