Docker安装Mongodb及使用

最近有点偷懒,没有好好学习。因为预计接下来用mongodb会比较多,做一个简单的总结。

Docker + Mongodb

docker是真的好用,谁用谁知道,因为抖音的评论数据字段是在太多了,不知道哪些以后可能用得着,而返回的本身又是json的格式,用mongo得了,直接扒拉下来,以后再去取,就是有点占空间。才爬了十几万评论就已经几百兆了。字段实在太多:

说岔了,还是写一下配置以及py连接简单的使用说明。我的是centos系统。

镜像安装

docker pull mongo:latest

强烈建议改成国内的源,改一个配置文件,然后重启docker就好了,自行百度。重启docker:

systemctl restart docker

然后运行镜像:

docker run --name mongo  -p 27017:27017 -d mongo:latest  --auth

这个auth是账号密码,mongo默认是没有的,我觉得还是设置一个,之后可以分配权限。

# 进入容器 注意这里的admin 是mongo中默认的数据库(Database)
docker exec -it 51a5b5e05fe4 mongo admin

db.createUser({ user: 'admin', pwd: '123', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

这一步是设置一个管理员账户,管理员的权限较大,可以看到所有的库,包括系统的,但是不一定有权限进去或修改数据。这里的admin是用户名,不是数据库名。主要是我开始nc,完全可以将这个权限的用户设为root/root的,不过设呈admin/123自己知道也行。

然后进入数据库,用管理员账户做身份认证,之后再创建普通用户,就可以使用普通用户登录相应数据库了。

docker exec -it 4348e92d0cbf mongo admin
# 验证
db.auth("admin","123");
# 创建用户(角色是可读可写,数据库是test)
 db.createUser({ user: 'lj', pwd: '123456', roles: [ { role: "readWrite", db: "test" } ] });
 exit

使用普通用户:

docker exec -it 4348e92d0cbf mongo admin
# 认证
db.auth('lj','123456')
# 切换数据库,因为这个用户只有对test读写的权力
use test
# 保存数据
db.dy.save({name:'liujie'})

可视化

我用的可视化工具是如上面的图所示的Robo 3T 1.3版本。社区版免费。

database要填admin。下面用户名和密码就是用你创建的user。分别赋予不同的权限。

上面管理员登陆的可以看到system库和config以及我指定的test。而下面用个人账号lj/123456登陆的只能看到test库。

pymongo连接数据库

其实这个很简单,不过我开始也是在权限上一直不通过。后来其实只要连接账号密码即可,然后指定你可以使用的数据库,没有相应的权限会报错。

client = pymongo.MongoClient("mongodb://lj:123456@ip:27017/")
db = client['test']

collection = db['my_collection']

data = {
    'name': 'liujie',
    'age': 23
}
db.insert(data)

ok!说实话,mongo这种非关系型数据库目前用着还是比较舒服的,至少不用纠结于字段等,响应也好,只不过数据量大的时候插入可能不是那么友好。

之后如果不够大准备弄个分布式的,再研究研究权限方面的,俩小时入门,后面折腾得好半天。。。。

ps:其实还有两篇总结,但是感觉写的比较垃圾,还是放一放之后再改,看有没有新的体会。


  转载请注明: April Docker安装Mongodb及使用

 上一篇
数据的标准化与归一化 数据的标准化与归一化
最近做一个抖音的数据分析的时候,在数据归一化和标准化经常看到不一样的解释,通过不断地百度+知乎+测试,算是大概明白了这个过程。简单总结一下。 标准化与归一化其实这个问题主要的原因是这这些概念都是直接翻译过来的,Normalize和Stand
2020-04-22
下一篇 
知识图谱技术综述 知识图谱技术综述
知识图谱最底层的构建就是实体抽取和关系抽取。实体抽取用的主要是命名实体识别的技术,但是由于实体的领域属性,所以很难有一个通用的模型找出所需要的领域实体,需要人为的结合实际情况构建。而关系抽取在实际任务中同样需要人为的定义出关系,之后在文本中
2020-03-18
  目录