在python中使用mongodb:pymongo

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]")

  • 验证
    常见有两种验证方式:
  1. 用户名和密码写在地址里
from pymongo import MongoClient
client = MongoClient("mongodb://user:pw@localhost:27017/testdb")
db = client["testdb"]
co = db["testco"]
  1. 连接并选择数据库后,用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_onereplace_one代替save方法。
后来又在网上搜索到insert方法也不被建议使用,而是使用inser_oneinsert_many来代替。

  • sort的使用
doc.find().sort([(key, 1),])

在sort中使用list的形式来指定排序key和正、逆序(1表示正序,-1表示逆序),而非mongodb中的{"key":1,}形式,原因是在python中dict类型是无序的,当存在多个排序key时无法确定排序key的顺序。

你可能感兴趣的:(在python中使用mongodb:pymongo)