Linux部署
安装
sudo apt install mongo
启动
sudo service mongodb start
配置
sudo vi /etc/mongodb.conf
添加用户
db.createUser({user:"user", pwd:"pwd", roles:[{role:"root", db:"admin"}]})
| role | 解释 |
|---|---|
| root | 所有权限 |
| read | 允许用户从数据库的任何集合中读取数据 |
| readAnyDatabase | 同read,但针对所有数据库 |
| readWrite | 提供read的所有功能,并允许用户写数据库中的任何集合,包括插入、删除和更新文件,以及创建、重命名和删除集合 |
| readWriteAnyDatabase | 同readWrite,只是针对所有数据库 |
| dbAdmin | 允许用户读取和写入数据库,以及清理、修改、压缩、得到统计概要,并进行验证 |
| dbAdminAnyDatabase | 同dbadmin,但针对所有数据库 |
| clusterAdmin | 允许用户对MongoDB执行一般的管理,包括连接、集群、复制、列出数据库、创建数据库和删除数据库 |
| userAdmin | 允许用户创建和修改数据库的用户账号 |
| userAdminAnyDatabase | 同userAdmin,但针对所有的数据库 |
-
这里有一个坑:
如果用户是在一个数据库下创建的,即使roles指定的db是另一个数据库,这个用户也只能在创建它的数据库下验证。比如我在admin里创建了wemsg用户,它对应的数据库是wemsg,但登录验证时还是必须在admin数据库下验证!
Snipaste_2019-05-16_15-14-57.jpg
删除用户
db.dropUser("user")
验证/切换用户
db.auth("user", "pwd")
connect
pymongo.MongoClient("mongodb://$[username]:$[password]@$[hostlist]/$[database]?authSource=$[authSource]")
- 验证
常见有两种验证方式:
- 用户名和密码写在地址里
from pymongo import MongoClient
client = MongoClient("mongodb://user:pw@localhost:27017/testdb")
db = client["testdb"]
co = db["testco"]
- 连接并选择数据库后,用authenticate方法验证
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["testdb"]
# 这里如果验证失败,可以检查一下上面**添加用户**里写的那个坑,其次网上看到有说如果版本比较老,需要加上mechanism参数,参考https://blog.csdn.net/xc_zhou/article/details/80687870
db.authenticate("user", "pw")
co = db["testco"]
CRUD
create
insert_one({}) insert_many()
- example
co.insert_one({"name": "kay", "age": 26})
read
find({})
- example
find({
"status": "A",
"$or": [{"qty": {"$lt": 30}}, {"item": {"$regex": "^p"}}]})
update
update_one({}, {}) update_many({}, {})
delete
delete_one({}) delete_many({})
- delete collection
co.drop()
技巧
- 避免使用insert/save/update/remove方法
在使用save方法时收到警告信息:
c:\users\kayfe\appdata\local\programs\python\python37-32\lib\site-packages\ipykernel_launcher.py:21: DeprecationWarning: save is deprecated. Use insert_one or replace_one instead
说明应该使用insert_one或replace_one代替save方法。
后来又在网上搜索到insert方法也不被建议使用,而是使用inser_one和insert_many来代替。
- sort的使用
doc.find().sort([(key, 1),])
在sort中使用list的形式来指定排序key和正、逆序(1表示正序,-1表示逆序),而非mongodb中的{"key":1,}形式,原因是在python中dict类型是无序的,当存在多个排序key时无法确定排序key的顺序。








网友评论