Untitled (1)

引入库文件

import pymongo

如果没有安装库,可pip install pynongo 进行安装

链接数据库

#连接数据库,指定IP和端口
myclient=pymongo.MongoClient('localhost',27017)

查看数据库和集合

#查看数据库 list_database_names
dbs=myclient.list_database_names()
dbs
['admin', 'config', 'local', 'test']
#切换/创建(本身不存在)数据库
mydb=myclient['test']#切换到数据库test
#查看test数据库中的所有集合
cols=mydb.list_collection_names()
cols
['c1']
#直接切换/创建集合
c1=mydb['c1']
#显式创建、删除集合
mydb.create_collection("c2")
mydb.drop_collection("c2")
{'nIndexesWas': 1, 'ns': 'test.c2', 'ok': 1.0}

文档的增删改查


#打印文档
for i in c1.find():
    print(i)
{'_id': ObjectId('664c3b1604761f637b8e6856'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b1604761f637b8e6858'), 'name': 'aa3', 'age': 77}
{'_id': ObjectId('664c4a0a86ba78ba8e221818'), 'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c500086ba78ba8e22181d'), 'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}

单文档插入 insert_one

d1={"name":"kjfd","age":18,"major":"大数据技术"}#在python中,key(字段)必须用双引号括起来
x=c1.insert_one(d1)
print(x.inserted_id)
664c5dc386ba78ba8e221821
#查询c1文档
for i in c1.find():
    print(i)
{'_id': ObjectId('664c3b1604761f637b8e6856'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b1604761f637b8e6858'), 'name': 'aa3', 'age': 77}
{'_id': ObjectId('664c4a0a86ba78ba8e221818'), 'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c500086ba78ba8e22181d'), 'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c5dc386ba78ba8e221821'), 'name': 'kjfd', 'age': 18, 'major': '大数据技术'}

多文档插入 insert_many

d2=[
    {"name":"jasgdk","age":14,"major":"大数据技术"},
    {"name":"ksdh","age":49,"major":"大数据技术"},
    {"name":"ksgd","age":42,"major":"人工智能"}
]
x=c1.insert_many(d2)
print(x.inserted_ids)#打印多文档_id
[ObjectId('664c5dc686ba78ba8e221822'), ObjectId('664c5dc686ba78ba8e221823'), ObjectId('664c5dc686ba78ba8e221824')]
#查询c1文档
for i in c1.find():
    print(i)
{'_id': ObjectId('664c3b1604761f637b8e6856'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b1604761f637b8e6858'), 'name': 'aa3', 'age': 77}
{'_id': ObjectId('664c4a0a86ba78ba8e221818'), 'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c500086ba78ba8e22181d'), 'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c5dc386ba78ba8e221821'), 'name': 'kjfd', 'age': 18, 'major': '大数据技术'}
{'_id': ObjectId('664c5dc686ba78ba8e221822'), 'name': 'jasgdk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c5dc686ba78ba8e221823'), 'name': 'ksdh', 'age': 49, 'major': '大数据技术'}
{'_id': ObjectId('664c5dc686ba78ba8e221824'), 'name': 'ksgd', 'age': 42, 'major': '人工智能'}

#按条件查询c1文档
for i in c1.find({"major":"大数据技术"},{"_id":0}):
    print(i)
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'kjfd', 'age': 18, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 14, 'major': '大数据技术'}
{'name': 'ksdh', 'age': 49, 'major': '大数据技术'}
#按修饰(运算符)符查询
q={"age":{"$gt":20}}#查询条件,age大于20
for i in c1.find(q,{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa3', 'age': 77}
{'name': 'ksdh', 'age': 49, 'major': '大数据技术'}
{'name': 'ksgd', 'age': 42, 'major': '人工智能'}
#正则匹配 $regex,查询name以k开头的所有文档
q1={"name":{"$regex":"^k"}}
for i in c1.find(q1,{"_id:0"}):
    print(i)
{'_id': ObjectId('664c5dc386ba78ba8e221821')}
{'_id': ObjectId('664c5dc686ba78ba8e221823')}
{'_id': ObjectId('664c5dc686ba78ba8e221824')}
for i in c1.find({},{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa3', 'age': 77}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'kjfd', 'age': 18, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 14, 'major': '大数据技术'}
{'name': 'ksdh', 'age': 49, 'major': '大数据技术'}
{'name': 'ksgd', 'age': 42, 'major': '人工智能'}
#在python中管道必须为list形式,所以要用[]括起来
pin=[
    {"$group":{"_id":"$major","max_age":{"$max":"$age"}}}
]
#返回结果为列表,循环打印
result=c1.aggregate(pin)
for i in result:
    print(i)
{'_id': '人工智能', 'max_age': 42}
{'_id': None, 'max_age': 88.0}
{'_id': '大数据技术', 'max_age': 49}

按照major分组,统计年龄平均值

pin1=[
    {"$group":{"_id":"$major","avg_age":{"$avg":"$age"},"count":{"$sum":1}}},
    {"$sort":{"avg_age":-1}}
]
#返回结果为列表,循环打印
result=c1.aggregate(pin1)
for i in result:
    print(i)

{'_id': None, 'avg_age': 82.5, 'count': 2}
{'_id': '人工智能', 'avg_age': 42.0, 'count': 1}
{'_id': '大数据技术', 'avg_age': 23.8, 'count': 5}

改(更新

更新单个文档update_one

c1.mydb['c1']
for d in c1.find({},{"_id":0}):
    print(d)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa3', 'age': 77}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'kjfd', 'age': 18, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 14, 'major': '大数据技术'}
{'name': 'ksdh', 'age': 49, 'major': '大数据技术'}
{'name': 'ksgd', 'age': 42, 'major': '人工智能'}
#name为aa3的文档,年龄改为77,$set——修改列值
c1.update_one({"name":"aa3"},{"$set":{"age":77}})
for d in c1.find({"name":"aa3"},{"_id":0}):
    print(d)
{'name': 'aa3', 'age': 77}

更新多个文档update_many:更新找到的所有文档

#更新major为大数据技术的文档中的年龄字段,全部加5岁——$inc
q={"major":"大数据技术"}#条件
n_d={"$inc":{"age":5}}#新数据
c1.update_many(q,n_d)
for i in c1.find({},{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa3', 'age': 77}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'kjfd', 'age': 23, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'ksdh', 'age': 54, 'major': '大数据技术'}
{'name': 'ksgd', 'age': 42, 'major': '人工智能'}

删除单个文档—delete_one:删除匹配上的第一个文档

#删除name为aa2的文档
c1.delete_one({"name":"aa2"})#参数为匹配条件
for i in c1.find({},{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa3', 'age': 77}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'kjfd', 'age': 23, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'ksdh', 'age': 54, 'major': '大数据技术'}
{'name': 'ksgd', 'age': 42, 'major': '人工智能'}

删除多个文档—delete_many:删除所有匹配上的文档

#删除name以k开头的文档,需要使用正则表达式匹配
c1.delete_many({"name":{"$regex":"^k"}})
for i in c1.find({},{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa3', 'age': 77}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}

删除所有文档—delete many-- 查询条件为空即可

其他

#排序--sort()
for i in c1.find({},{"_id":0}).sort("age",1):
    print(i)
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'aa3', 'age': 77}
{'name': 'aa1', 'age': 88.0}
#限制返回数--limit(),只返回指定个数的文档
for i in c1.find({},{"_id":0}).limit(1):
    print(i)
{'name': 'aa1', 'age': 88.0}
#跳过--skip(),跳过指定的文档数,返回身剩下的文档
for i in c1.find({},{"_id":0}).skip(2):
    print(i)
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 24, 'major': '大数据技术'}
{'name': 'jasgdk', 'age': 19, 'major': '大数据技术'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值