开始以前咱们先建立数据库test,在test下面建立两个聚类:student_info和teacher_info,并写入数据数据库
import pymongo client = pymongo.MongoClient('localhost', 27017) test = client['test'] student_info = test['student_info'] teacher_info = test['teacher_info'] student_infos = [{'name':'小明','age':12,'city':'广州','hobby':['足球','游戏']}, {'name':'小李','age':11,'city':'北京','hobby':['篮球']}, {'name':'小张','age':9,'city':'上海','hobby':['吃饭','睡觉','发呆']}, {'name':'小丽','age':12,'city':'苏州','hobby':['音乐']}, {'name':'小红','age':8,'city':'南京','hobby':['读书']}] for i in student_infos: student_info.insert_one({'name':i['name'],'city':i['city'],'age':i['age'],'hobby':i['hobby']}) teacher_infos = [{'name':'张老师','age':23,'city':'广州','subject':'语文'}, {'name':'王老师','age':35,'city':'深圳','subject':'英语'}, {'name':'李老师','age':45,'city':'哈尔滨','subject':'数学'}, {'name':'陈老师','age':38,'city':'苏州','subject':'物理'}, {'name':'黄老师','age':28,'city':'兰州','subject':'体育'}] for i in teacher_infos: teacher_info.insert_one({'name':i['name'],'city':i['city'],'age':i['age'],'subject':i['subject']})
这样咱们获得了一个包含两个聚类的数据库test,两个聚类以下:spa
# 链接MongoDB client = pymongo.MongoClient('localhost', 27017) # 链接数据库test test = client['test'] # 也可写成这种形式 test = client.test
# 查看数据库test中所有汇集名称 print(test.collection_names())
结果:3d
['system.indexes', 'student_info', 'teacher_info']
# 查看汇集student_info中的一条记录 print(test.student_info.find_one())
结果:code
{'hobby': ['足球', '游戏'], '_id': ObjectId('571c522513d59412f4cbf78c'), 'name': '小明', 'age': 12, 'city': '广州'}
# 查看聚类中'age'字段为12的一条记录(若有多条只显示第一条) print(test.student_info.find_one({'age':12}))
结果:blog
{'age': 12, 'hobby': ['足球', '游戏'], 'name': '小明', 'city': '广州', '_id': ObjectId('571c522513d59412f4cbf78c')}
# 前一个字典为查询条件,后一个字典为展现的字段 # 不写查询条件返回所有记录 for i in test.student_info.find({},{"name":1}): print(i)
结果:排序
{'name': '小明', '_id': ObjectId('571c9aae13d59423b8bef633')} {'name': '小李', '_id': ObjectId('571c9aae13d59423b8bef634')} {'name': '小张', '_id': ObjectId('571c9aae13d59423b8bef635')} {'name': '小丽', '_id': ObjectId('571c9aae13d59423b8bef636')} {'name': '小红', '_id': ObjectId('571c9aae13d59423b8bef637')}
# 由于默认会返回'_id'字段,不要显示'_id'字段时能够这样写: for i in test.student_info.find({},{"name":1,'_id':0}): print(i)
结果:索引
{'name': '小明'} {'name': '小李'} {'name': '小张'} {'name': '小丽'} {'name': '小红'}
# 查找'age'为12的记录,返回它的'name'的值 for i in test.student_info.find({'age':12},{"name":1,'_id':0}): print(i)
结果:游戏
{'name': '小明'} {'name': '小丽'}
# 查看汇集的多条记录 for i in test.student_info.find(): print(i)
结果:ci
{'city': '广州', 'hobby': ['足球', '游戏'], 'age': 12, '_id': ObjectId('571c522513d59412f4cbf78c'), 'name': '小明'} {'city': '北京', 'hobby': ['篮球'], 'age': 11, '_id': ObjectId('571c522513d59412f4cbf78d'), 'name': '小李'} {'city': '上海', 'hobby': ['吃饭', '睡觉', '发呆'], 'age': 9, '_id': ObjectId('571c522513d59412f4cbf78e'), 'name': '小张'} {'city': '苏州', 'hobby': ['音乐'], 'age': 12, '_id': ObjectId('571c522513d59412f4cbf78f'), 'name': '小丽'} {'city': '南京', 'hobby': ['读书'], 'age': 8, '_id': ObjectId('571c522513d59412f4cbf790'), 'name': '小红'}
# 查看'age'值为12的所有记录 for i in test.student_info.find({'age':12}): print(i)
结果:数学
{'_id': ObjectId('571c522513d59412f4cbf78c'), 'city': '广州', 'hobby': ['足球', '游戏'], 'age': 12, 'name': '小明'} {'_id': ObjectId('571c522513d59412f4cbf78f'), 'city': '苏州', 'hobby': ['音乐'], 'age': 12, 'name': '小丽'}
# 查看汇集的总数 print(test.student_info.find().count())
结果:
5
查看聚类中某个键的全部值
# 查看聚类中某个键的全部值 print(test.student_info.distinct('city'))
结果:
['广州', '北京', '上海', '苏州', '南京']
# 默认为升序 for i in test.student_info.find().sort("age"): print(i) # 升序 for i in test.student_info.find().sort("age",pymongo.ASCENDING): print(i) # 降序 for i in test.student_info.find().sort("age",pymongo.DESCENDING): print(i)
汇集查询结果多列排序
for i in test.student_info.find().sort([("age",pymongo.ASCENDING),("name",pymongo.DESCENDING)]): print(i)
# 添加记录 test.student_info.insert_one({'name':'小白'})
# 用迭代来添加记录 name_list = ['小A','小B','小C'] test.student_info.insert_many({'name':i} for i in name_list) name_list = ['小x','小y','小z'] age_list = [10,11,12] test.student_info.insert_many({'name':i,'age':j} for i in name_list for j in age_list)
修改一条记录:
# 找出'age'值为12的记录,把这些记录的第一条的'age'值改成100(注意:本用法只修改一条记录) test.student_info.update_one({'age': 12}, {'$set': {'age': 100}})
修改多条记录:
# 找出'age'值为100的记录,把这些记录的'age'值改成12(注意:本方法修改全部符合条件的记录) test.student_info.update_many({'age': 100}, {'$set': {'age': 12}})
小技巧:修改所有记录:
# 以_id为索引,遍历所有记录,并把每一条的'age'值修改成:100 for i in test.student_info.find(): test.student_info.update_one({'_id':i['_id']}, {'$set': {'age': 100}})
删除一条记录:
# 删除第一条'name'值为'小明'的记录 test.student_info.delete_one({'name':'小明'})
删除多条记录:
# 删除所有'age'值为12的记录 test.student_info.delete_many({'age':12})
替换一条记录:
# 找出'city'值为'北京'的记录,替换为'hometown':'廊坊',注意:是替换记录内的所有内容,并不是只是替换'city'字段 test.student_info.replace_one({'city':'北京'},{'hometown':'廊坊'}) for i in test.student_info.find({'hometown':'廊坊'}): print(i)
结果:
{'_id': ObjectId('571c901b13d5942564a5a23e'), 'hometown': '廊坊'}
# 删除聚类
test.student_info.drop()