2018年3月27日星期二
2018年3月18日星期日
mongo eve 学习
Quickstart
A Minimal Application
首先,跑起来一个小程序,在跑eve程序之前,你需要首先确定mongo服务端开启,请参考这里
创建文件:run.py 和 setting.py
在run.py写入下列代码:
—————————————————————————
from eve import Eve
app = Eve()
if __name__ == '__main__':
app.run()
—————————————————————————
在setting.py写入下列代码
—————————————————————————
DOMAIN = {'people': {}}
—————————————————————————
运行python run.py;
打开另外一个终端,curl -i http://127.0.0.1:5000 或者 curl -i http://127.0.0.1:5000/people
由于我们的setting.py并没有提供people数据库的任何细节,甚至这个数据库有可能根本不存在,故我们暂时还查不出数据库中的内容。
Database Interlude
如果你想实实在在的连接到数据库,你需要在setting.py写入如下内容:
—————————————————————————
MONGO_HOST = 'localhost'
MONGO_POST = 27017
# 如果你的数据库不需要验证,可以忽略下面两步
MONGO_USERNAME = '<your username>'
MONGO_PASSWORD = '<your password>'
MONGO_DBNAME = 'apitest'
————————————————————————
A Minimal Application
首先,跑起来一个小程序,在跑eve程序之前,你需要首先确定mongo服务端开启,请参考这里
创建文件:run.py 和 setting.py
在run.py写入下列代码:
—————————————————————————
from eve import Eve
app = Eve()
if __name__ == '__main__':
app.run()
—————————————————————————
在setting.py写入下列代码
—————————————————————————
DOMAIN = {'people': {}}
—————————————————————————
运行python run.py;
打开另外一个终端,curl -i http://127.0.0.1:5000 或者 curl -i http://127.0.0.1:5000/people
由于我们的setting.py并没有提供people数据库的任何细节,甚至这个数据库有可能根本不存在,故我们暂时还查不出数据库中的内容。
Database Interlude
如果你想实实在在的连接到数据库,你需要在setting.py写入如下内容:
—————————————————————————
MONGO_HOST = 'localhost'
MONGO_POST = 27017
# 如果你的数据库不需要验证,可以忽略下面两步
MONGO_USERNAME = '<your username>'
MONGO_PASSWORD = '<your password>'
MONGO_DBNAME = 'apitest'
————————————————————————
2018年3月16日星期五
mongo
1.在操作之前你需要知道的一些事情
database 数据库
collection 数据库表/集合
document 数据记录行/文档
field 数据字段/域
index 索引
primary key 主键,mongodb自动将_id字段设置为主键
2.mongo的一些常用语法
创建数据库 : use Dataset_name
删除数据库 : db.dropDatabase()
创建集合 : db.createCollection(name, options)
查看已有集合 : show collections
删除集合 : db.collection.drop()
插入文档 : db.collection.insert(document)
查看已插入的文档 : db.collection.find()
查看格式化的文档 : db.collection.find().pretty()
更新已经存在的文档: db.collection.update()
删除文档: db.collection.remove()
查询语句: db.collection.find()
3.如何开启mongo rest (简单的web服务端)
database 数据库
collection 数据库表/集合
document 数据记录行/文档
field 数据字段/域
index 索引
primary key 主键,mongodb自动将_id字段设置为主键
2.mongo的一些常用语法
创建数据库 : use Dataset_name
删除数据库 : db.dropDatabase()
创建集合 : db.createCollection(name, options)
查看已有集合 : show collections
删除集合 : db.collection.drop()
插入文档 : db.collection.insert(document)
查看已插入的文档 : db.collection.find()
查看格式化的文档 : db.collection.find().pretty()
更新已经存在的文档: db.collection.update()
删除文档: db.collection.remove()
查询语句: db.collection.find()
3.如何开启mongo rest (简单的web服务端)
sudo service mongod stop sudo mongod --dbpath /data/db --rest注意,如果/data/下没有db,你需要自己创建,否则会出错删除/tmp/mongodb-27017.sock如果还出错: ps -ef |grep mongo ,killmongo占用的全部进程 4.使用mongo rest 返回结果为 {
"offset" : 0,
"rows": [
],
"total_rows" : 0 ,
"query" : {} ,
"millis" : 0
}
https://stackoverflow.com/questions/28770609/mongodb-rest-api-returns-no-results
推荐了: http://restheart.org/
本文基于 Ubuntu 16.04, MongoDB3.4.9 环境完成。
安装
连接
mongo -u user -p passwd --host 127.0.0.1 --port 27017 admin
在 /etc/mongod.conf 中修改 bindIp: 0.0.0.0,允许远程连接mongo。
用户管理
1. MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
2. 切换到admin数据库,添加的账号才是管理员账号。
3. 用户只能在用户所在数据库登录,包括管理员账号。
4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
添加管理员账号:
use admin
db.createUser(
{
user: "admin",
pwd: "passwd",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
开启权限认证:
sudo vim /etc/mongod.conf
添加以下配置:
security:
authorization: enabled
然后 sudo service mongod restart 重启mongo,再启动mongo时如果没有用户名密码则无法查看db。
认证:
use admin
db.auth("admin", "passwd")
认证完成后可以正常访问db。
添加普通用户:
use test
db.createUser(
{
user: "test",
pwd: "test",
roles: [ { role: "readWrite", db: "test" } ]
}
)
删除用户:db.dropUser()(删除当前db下的user),db.system.users.remove({user:"xxx"})这种方式已经在2.6及以后的版本中被禁止了。
查看当前用户:db.runCommand({connectionStatus : 1})
查看用户:show users(只显示当前db下的user)或者db.system.users.find()(只有在admin db下才有用,显示所有user,因为创建的用户信息保存在了admin库)
修改密码:db.changeUserPassword("user", "passwd")
用户授权:db.grantRolesToUser(
"accountUser01",
[
{ role: "read", db: "records" }
]
)
取消用户授权:db.revokeRolesFromUser(
"accountUser01",
[
{ role: "readWrite", db: "accounts" }
]
)
1. 内建的角色
2. 数据库用户角色:read、readWrite;
3. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
4. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
5. 备份恢复角色:backup、restore;
6. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
7. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
8. 内部角色:__system
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
基本命令
创建数据库:use DATABASE_NAME
查看所有数据库:show dbs
查看当前数据库下所有表:show collections
> db
显示当前数据库
插入文档:
db.COLLECTION_NAME.insert({xxx})
更新:
db.COLLECTION_NAME.update(...)
覆盖:
db.COLLECTION_NAME.save(...)
查询:
db.COLLECTION_NAME.find(query, projection)
db.COLLECTION_NAME.findOne()
db.COLLECTION_NAME.find().pretty() // readable json
projection 指定字段返回:_id 默认会返回,如果不需要,设置为0,其他字段设置为1的会返回。例如:find({}, {"xx": 1, "_id": 0} // 只显示 xx 字段
查询条数:
db.COLLECTION_NAME.find().count()
操作符:
$gt $lt $gte $lte
$type
limit 和 skip:
db.COLLECTION_NAME.find().limit(1).skip(2) // 从第三个开始,显示一个
排序:
db.COLLECTION_NAME.find().sort({KEY:1}) // 1升序,-1降序
删除数据库:
db.dropDatabase() // 删除当前数据库
删除collection:
db.COLLECTION_NAME.drop() // 不仅删除集合的文档,也会删除集合本身,同时也会删除在集合上创建的索引。
db.COLLECTION_NAME.remove(query, justOne, writeConcern) // 将集合中的文档删除,但不删除集合本身,也不删除集合的索引。
索引:
db.COLLECTION_NAME.ensureIndex({KEY:1})
聚合:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
主键:
db.COLLECTION_NAME.createIndex( { 'lastname': 1, 'firstname': 1 }, { unique: true } )
2017.09.04
2018年3月12日星期一
我要学习的东西列表
[http]
requests
[编译相关]
1. bazel
[web框架相关]
1. flask
2. eve(用于mongo数据库的外部服务)
[算法相关]
1. lda原理 -----> Mallet
2. 对话系统实时论文监控
3. 推荐系统算法学习
[线上部署相关]
1. docker
2. bazel docker部分
2. abtest
[分布式相关]
1. spark
2. spark streaming
3. dataframe
4. hdfs
[语言相关]
1. python
2. java
3. lua
[实习论文相关]
1. 开题报告
[数据处理和流处理]
1. data frame
2. kfaka
3.redis
[数据库相关]
1.mongo
2. mongoengine (python代码中对mongo数据库的访问,为什么不要pymongo)
3. hbase
4. mysql
[日志相关]
1.rsyslog
[单元测试相关]
1.unittest mock
我已经学了的
[已完成]
1.python 的基础学习和打牢
2. 开通报告的编写
[正在进行中]
1.tensorflow的学习
[尚待继续]
1.requests
requests
[编译相关]
1. bazel
[web框架相关]
1. flask
2. eve(用于mongo数据库的外部服务)
[算法相关]
1. lda原理 -----> Mallet
2. 对话系统实时论文监控
3. 推荐系统算法学习
[线上部署相关]
1. docker
2. bazel docker部分
2. abtest
[分布式相关]
1. spark
2. spark streaming
3. dataframe
4. hdfs
[语言相关]
1. python
2. java
3. lua
[实习论文相关]
1. 开题报告
[数据处理和流处理]
1. data frame
2. kfaka
3.redis
[数据库相关]
1.mongo
2. mongoengine (python代码中对mongo数据库的访问,为什么不要pymongo)
3. hbase
4. mysql
[日志相关]
1.rsyslog
[单元测试相关]
1.unittest mock
我已经学了的
[已完成]
1.python 的基础学习和打牢
2. 开通报告的编写
[正在进行中]
1.tensorflow的学习
[尚待继续]
1.requests
我的专业英文单词记录
1. distribution 发行版
Customizable resource endpoints
example: The2. Customizable 可定制lsb_release -cssub-command below returns the name of your Ubuntu distribution, such asxenial
Customizable resource endpoints
docker
我的问题:
1.docker是什么?
2.docker的基本原理是什么?
3.docker的基础语句有哪些?
4.bazel 中的docker如何用?
5.既然bazel的编译步骤已经编译出了二进制文件,同样也将程序依赖的环境也包含了进去,那为什么还要docker?
也就是docker既然能把本机的环境全部复制到服务器上,那为什么还需要bazel编译应用程序为二进制文件?
1.Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上
我学习到的常用命令:
3. docker ps 查看容器
4. docker logs 2b1b7a428627 查看容器里运行代码的打印日志
5. docker stop 2b1b7a428627 退出容器
附录(相关学习资料):
[初学者资料]
初步理解 https://www.zhihu.com/question/28300645
进一步理解 http://blog.csdn.net/zjin_hua/article/details/52041757
学习 http://www.runoob.com/docker/docker-hello-world.html
我看到的一个比较全面,易于理解的资料:
https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md
1.docker是什么?
2.docker的基本原理是什么?
3.docker的基础语句有哪些?
4.bazel 中的docker如何用?
5.既然bazel的编译步骤已经编译出了二进制文件,同样也将程序依赖的环境也包含了进去,那为什么还要docker?
也就是docker既然能把本机的环境全部复制到服务器上,那为什么还需要bazel编译应用程序为二进制文件?
1.Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上
我学习到的常用命令:
1. docker run -i -t ubuntu:15.10 /bin/bash 进入一个 ubuntu15.10系统的容器
运行exit命令或者使用CTRL+D来退出容器
2. docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 命令创建一个以进程方式运行的容器3. docker ps 查看容器
4. docker logs 2b1b7a428627 查看容器里运行代码的打印日志
5. docker stop 2b1b7a428627 退出容器
附录(相关学习资料):
[初学者资料]
初步理解 https://www.zhihu.com/question/28300645
进一步理解 http://blog.csdn.net/zjin_hua/article/details/52041757
学习 http://www.runoob.com/docker/docker-hello-world.html
我看到的一个比较全面,易于理解的资料:
https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md
订阅:
博文 (Atom)
leetcode 17
17. Letter Combinations of a Phone Number Medium Given a string containing digits from 2-9 inclusive, return all possible l...
-
写在开头,以下是我在过程中遇到的一些问题 1.关于KNN算法代码里的一些问题 1.1关于numpy的sum用法 Check out the documentation for numpy.sum, paying particular attention to the ...
-
我的问题: 1.docker是什么? 2.docker的基本原理是什么? 3.docker的基础语句有哪些? 4.bazel 中的docker如何用? 5.既然bazel的编译步骤已经编译出了二进制文件,同样也将程序依赖的环境也包含了进去,那为什么还要docker? ...
-
1. distribution 发行版 example: The lsb_release -cs sub-command below returns the name of your Ubuntu distribution, such as xenial 2. Custo...