用了一段时间的MongoDB,整理下知识点,本文注重实用,给出示例代码,持续更新。
PyMongo
安装
pip install pymongo
建立连接
from pymongo import MongoClient
client = MongoClient("127.0.0.1:27001")
db = client.mydb # user database
常用SQL
CRUD
# select
cursor = db.student.find({"borough":"Manhattan"})
# insert
db.student.insert_one({"grade": "one", "class": 3,"age":12,"name":"LiLei"})
# update
result = db.student.update_many(
{"grade": "one", "class": 3},
{"$set": {"age": 13}}
)
# delete
result = db.student.delete_many({"age": 18})
count
db.student.count() # 直接返回数目
还可以用 cursor.count() 获得数目
操作符
比较操作符: $gt 大于 $lt 小于 $gte 大于等于 $lte 小于等于
db.student.find({"age":{"$gte":12}})
db.student.find({"age":{"$lte":12}})
db.student.find({"age":{"$lte":12}})
$or $and 组合操作符表示逻辑或与:
db.student.find({"$and":[{"age":{"$gte":12}},"grade":5]})
db.student.find({"$or":[{"age":{"$gte":12}},"grade":5]})
GroupBy用法
# aggregate()用于多步操作
# 类似于pipe流执行每一步:
cursor = db.student.aggregate(
[
{"$group": {"_id": "$grade", "count": {"$sum": 1}}}
]
)
排序
cursor = db.student.find().sort([
("age", pymongo.ASCENDING),
("grade", pymongo.ASCENDING)
])
创建索引
db.student.create_index([
("grade", pymongo.ASCENDING),
("class", pymongo.ASCENDING)
])
高效遍历大表:(可快速遍历亿级容量的大表)
# 此处cursor为无限加载的流,直到读完整个表
cursor = db.company.find({}, {"Name": 1, "age": 1}, cursor_type=cursor.CursorType.EXHAUST,no_cursor_timeout=True).batch_size(10000)
for result in cursor:
#handel result