nosql python

连接库文件

import pymongo
#连接数据库,指定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}

文档的增删改查

myclient = pymongo.MongoClient('localhost',27017)
mydb = myclient['test']#切换到数据库test
c1 = mydb['c1']

for i in c1.find():
    print(i)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dbf'), 'name': 'aa2', 'age': 99.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 100.0}

增加

单文档插入 insert_one

d1 = {"name":"kij","age":32,"major":"大数据技术"}#在py中,key(字段)必须用双(单引号括起来)
x = c1.insert_one(d1)
print(x.inserted_id)#打印id
664c4881bf0ae544ce0c06a8
for i in c1.find():
    print(i)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dbf'), 'name': 'aa2', 'age': 99.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 100.0}
{'_id': ObjectId('664c4835bf0ae544ce0c06a7'), 'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'_id': ObjectId('664c4881bf0ae544ce0c06a8'), 'name': 'kij', 'age': 32, 'major': '大数据技术'}

多文档插入 insert_many

#多文档插入,参数列表(数组)
d2 = [
    {"name":"jdfjdsk","age":14,"major":"大数据技术"},
    {"name":"jdghff","age":17,"major":"大数据财务"},
    {"name":"gdfh","age":78,"major":"云雾大致"},
]
x = c1.insert_many(d2)
print(x.inserted_ids)#打印多文档id
[ObjectId('664c49a3bf0ae544ce0c06af'), ObjectId('664c49a3bf0ae544ce0c06b0'), ObjectId('664c49a3bf0ae544ce0c06b1')]
#查询c1文档
for i in c1.find():
    print(i)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dbf'), 'name': 'aa2', 'age': 99.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 100.0}
{'_id': ObjectId('664c4835bf0ae544ce0c06a7'), 'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'_id': ObjectId('664c4881bf0ae544ce0c06a8'), 'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06a9'), 'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06aa'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c494ebf0ae544ce0c06ab'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ac'), 'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ad'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ae'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06af'), 'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b0'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b1'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}

查询

#简单条件查询c1文档
#find()第一个参数为查询体哦阿健,第二个参数为(不)显示的列
for i in c1.find({"major":"大数据技术"},{"_id":0}):
    print(i)
{'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
#按修饰符查询
q = {"age":{"$gt":50}}#查询条件
for i in c1.find(q,{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa2', 'age': 99.0}
{'name': 'aa3', 'age': 100.0}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
#正则匹配 $regex ,查询名字name以k开头的所有文档
q1 = {"name":{"$regex":"^g"}}
for i in c1.find(q1,{"_id":0}):
    print(i)
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
for i in c1.find({},{"_id":0}):
    print(i)
{'name': 'aa1', 'age': 88.0}
{'name': 'aa2', 'age': 99.0}
{'name': 'aa3', 'age': 100.0}
{'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
#在py中管道必须为list形式,所以要用括号
pin = [
    {"$group":{"_id":"$major","max_age":{"$max":"$age"}}}
]
#返回结果为列表,循环打印
result = c1.aggregate(pin)
for i in c1.aggregate(pin):
    print(i)
{'_id': None, 'max_age': 100.0}
{'_id': '大数据技术', 'max_age': 32}
{'_id': '大数据财务', 'max_age': 17}
{'_id': '云雾大致', 'max_age': 78}

按照major。统计年龄平均值,并统计每个分组文档数,按照平均年龄降序排序

pin = [
    {"$group":{"_id":"$major","max_age":{"$max":"$age"}}},
    {"$sort":{"avg_age":-1}}
]
#返回结果为列表,循环打印
result = c1.aggregate(pin)
for i in c1.aggregate(pin):
    print(i)
{'_id': None, 'max_age': 100.0}
{'_id': '大数据技术', 'max_age': 32}
{'_id': '云雾大致', 'max_age': 78}
{'_id': '大数据财务', 'max_age': 17}

改(更新)

c1 = mydb['c1']
for d in c1.find():
    print(d)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dbf'), 'name': 'aa2', 'age': 99.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 100.0}
{'_id': ObjectId('664c4835bf0ae544ce0c06a7'), 'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'_id': ObjectId('664c4881bf0ae544ce0c06a8'), 'name': 'kij', 'age': 32, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06a9'), 'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06aa'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c494ebf0ae544ce0c06ab'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ac'), 'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ad'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ae'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06af'), 'name': 'jdfjdsk', 'age': 14, 'major': '大数据技术'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b0'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b1'), 'name': 'gdfh', 'age': 78, '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}

更新多干文档 uodata_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)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dbf'), 'name': 'aa2', 'age': 99.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 77}
{'_id': ObjectId('664c4835bf0ae544ce0c06a7'), 'name': 'kij', 'age': 37, 'major': '大数据技术'}
{'_id': ObjectId('664c4881bf0ae544ce0c06a8'), 'name': 'kij', 'age': 37, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06a9'), 'name': 'jdfjdsk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06aa'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c494ebf0ae544ce0c06ab'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ac'), 'name': 'jdfjdsk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ad'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ae'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06af'), 'name': 'jdfjdsk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b0'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b1'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}

#删除单个文档-- delete_one:删除匹配上的第一个文档
#删除name为aa2的文档
c1.delete_one({"name":"aa2"})#参数为匹配条件

for i in c1.find({},{"id":0}):
    print(i)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 77}
{'_id': ObjectId('664c4835bf0ae544ce0c06a7'), 'name': 'kij', 'age': 37, 'major': '大数据技术'}
{'_id': ObjectId('664c4881bf0ae544ce0c06a8'), 'name': 'kij', 'age': 37, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06a9'), 'name': 'jdfjdsk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c494ebf0ae544ce0c06aa'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c494ebf0ae544ce0c06ab'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ac'), 'name': 'jdfjdsk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ad'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ae'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06af'), 'name': 'jdfjdsk', 'age': 19, 'major': '大数据技术'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b0'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b1'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}

删除多个文档–delet_many:删除所有匹配上的文档

#删除name以k开头的文档,需要使用正则表达式匹配
c1.delete_many({"name":{"$regex":"k"}})

for i in c1.find({},{"id":0}):
    print(i)
{'_id': ObjectId('664c3b35a7a4436dcd899dbe'), 'name': 'aa1', 'age': 88.0}
{'_id': ObjectId('664c3b35a7a4436dcd899dc0'), 'name': 'aa3', 'age': 77}
{'_id': ObjectId('664c494ebf0ae544ce0c06aa'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c494ebf0ae544ce0c06ab'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ad'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c4989bf0ae544ce0c06ae'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b0'), 'name': 'jdghff', 'age': 17, 'major': '大数据财务'}
{'_id': ObjectId('664c49a3bf0ae544ce0c06b1'), 'name': 'gdfh', 'age': 78, 'major': '云雾大致'}

删除所有文档–delete_many–查询条件为空即可

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值