导入模块:
from pymongo import MongoClient
创建一个客户端链接:
client = MongoClient()#里面定义ip和port
选择要操作的数据库的集合:
col = client['py']['test']
插入一条记录,需要传入一个字典即可
col.insert({"name": "py5"}) # insert具有多个属性 insert_one;insert_many;单个或者多个
插入多条记录需要传入一个列表,元素项为字典
col.insert([{"name": "小王", "age": 18}, {"name": "小红", "age": 20}])
更新文档;分别有一下几个参数:
1. 条件
2. 更新的内容
3. multi参数表示是否更新多条数据,默认是false(参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新)
col.update({"age": 18}, {"$set": {"name": "小明"}}, multi=False)
删除文档:以下参数;
1. 条件
2. multi参数表示是否删除多条满足的文档 默认false
col.remove({"age": 18}, multi=False)
遍历取出集合中的每条数据
# ret = col.find()
# for x in ret:
# print(x)
新建一个数据库
stu = client['py']['stu']
插入新的数据:
插入的数据是一个列表包裹的字典为元素注意字典与字典之间用“逗号”
insert_list = [{'name': '段誉', 'hometown': '⼤理', 'age': 16, 'gender': False},
{'name': '洪七公', 'hometown': '华⼭', 'age': 18, 'gender': True},
{'name': '⻩蓉', 'hometown': '桃花岛', 'age': 18, 'gender': False},
{'name': '华筝', 'hometown': '蒙古', 'age': 18, 'gender': False},
{'name': '郭靖', 'hometown': '蒙古', 'age': 20, 'gender': True},
{'name': '⻩药师', 'hometown': '桃花岛', 'age': 40, 'gender': True},
{'name': '段王爷', 'hometown': '⼤理', 'age': 45, 'gender': True}]
插入以上数据列表中的数据
stu.insert(insert_list)
查询age=20的记录:
ret = stu.find({"age": 20})
查询所有age<=20的记录:
#lte 小于等于
ret = stu.find({"age": {"$lte": 20}})
查询所有age>20 的记录
#gt大于
ret = stu.find({"age": {"$gt": 20}})
#lt 小于
#lte 小于等于
#gt 大于
#gte 大于等于
#ne 不等于
# 逻辑预算符,and关系
# ret = stu.find({"age": 18, "gender": False})
# 逻辑预算符,or关系
# ret = stu.find({"$or": [{"age": 18}, {"gender": False}]})
# ret = stu.find({"$or": [{"age": {"$gte": 18}}, {"gender": False}]})
# 范围运算符 in
# ret = stu.find({"age": {"$in": [18, 20]}})
# 翻页 skip 跳过 limit 选中
# ret = stu.find()
# for x in ret:
# print(x)
#
# print("*" * 100)
#
# ret = stu.find().skip(3).limit(2)
# for x in ret:
# print(x)
# 投影,约束需要显示的字段
# ret = stu.find({}, {"_id": 0, "name": 1, "hometown": 1})
# 排序 1升序,-1降序
import pymongo
# ret = stu.find().sort([("age", pymongo.ASCENDING), ("gender", pymongo.DESCENDING)])
# 统计个数 count中只能计数
# ret = stu.find({"age": {"$lt": 18}}).count()
# print(ret)
# 筛选数据并去重,返回的是一个去重后的列表
# ret = stu.distinct("hometown", {"age": {"$gt": 20}})
# $group分组 "_id"分组的依据 $sum:1统计组内个数, $sum:$age 组内的年龄求和 $push 数据透视,组内元素放入一个列表中
# ret = stu.aggregate(
# [{"$group": {"_id": "$hometown", "count": {"$sum": 1}, "age": {"$sum": "$age"}, "name": {"$push": "$name"}}}])
# 多个字段进行分组
# ret = stu.aggregate([{"$group": {"_id": {"性别": "$gender", "姓名": "$name"}}}])
# ret = stu.aggregate([
# {"$match": {"age": {"$gt": 20}}},
# {"$group": {"_id": {"gender": "$gender", "hometown": "$hometown"}}},
# {"$project": {"_id": 0, "性别": "$_id.gender", "故乡": "$_id.hometown"}},
# {"$group": {"_id": "$性别", "人数": {"$sum": 1}}}])
# ret = stu.aggregate([{"$group": {"_id": "$hometown", "count": {"$sum": 1}}},
# {"$sort": {"count": pymongo.ASCENDING}},
# {"$skip": 1},
# {"$limit": 2}])
# for x in ret:
# print(x)
#
# 设置索引,1.提升查找效率,2数据去重
# stu.create_index()
# stu.ensure_index([("name", pymongo.ASCENDING)], unique=True)
# 获取索引,并美化打印
# x = stu.index_information()
# print(json.dumps(x, indent=2))
# 设置复合索引实现数据去重
# stu.ensure_index([("name", pymongo.ASCENDING), ("age", pymongo.DESCENDING)])