当前位置: 首页 > 工具软件 > PyMongo > 使用案例 >

MongoDB之pymongo的使用

戚升
2023-12-01
  1. 无需权限认证连接
from pymongo import MongoClient
client = MongoClient(host,port) 
# 如果连接是本地host port参数可以省略
collection = client.db名.集合名
  1. 需要权限认证连接
# 创建数据库连接
client = MongoClient('127.0.0.1',27017)
# 选择数据库
db = client['admin']
# 权限认证
db.authenticate('user','pwd')
  1. 增删改查
# 选择集合
col = client['db_name']['collection_name']

# 增加一条数据
ret = collection.insert_one({"name":"test10010","age":33})
print(ret)

# 增加多条数据
item_list = [{"name":"test1000{}".format(i)} for i in range(10)]
	# insert_many接收一个列表,列表中为所有需要插入的字典
t = collection.insert_many(item_list)

# 查找一条数据
t = collection.find_one({"name":"test10005"})
	#find_one查找并且返回一个结果,接收一个字典形式的条件
print(t)

# 查找条件数据
	# 结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,但是只能够进行一次读取
	#find返回所有满足条件的结果,如果条件为空,则返回数据库的所有
t = collection.find({"name":"test10005"})
    #结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,
for i in t:
    print(i)
for i in t: #此时t中没有内容
    print(i)

# 更新一条数据 注意使用$set命令
collection.update_one({"name":"test10005"},{"$set":{"name":"new_test10005"}})

# 更新多条数据
collection.update_many({"name":"test10005"},{"$set":{"name":"new_test10005"}})

# 删除一条数据
collection.delete_one({"name":"test10010"})

# 删除多条数据
collection.delete_many({"name":"test10010"})
  1. 补充
# 更新数据
# multi: 布尔类型, 设置数据更新时是否一次性更新多条数据, 默认为False
# upsert: 设置数据更新时,如果数据不存在,是否将本次数据添加到文件中,默认为False
my_infor.update({'name':'jiesen1'},{'$set':{'age':20,'sex':'woman'}},multi=True,upsert=True)
# 符号说明
'''
> : $gt
< : $lt
>= : $gte
<= : $lte
$in:(m,n,) : 提取在指定内容中的数据

$all[n,m,...]: 查找数据库中某一条数据是否全部包含all中的数据, 如果'全部'包含则返回该条数据,否则不反悔

$push: 向已有数据源中按照字段进行数据的添加.基于'列表'

$pop: 将数据库中对应数据的某一个字段数据按照指定方式进行删除. 其中 -1:从列表的起始位置开始删除; 1: 从列表的最后位置开始删除

$pull: 将对应数据中指定的数据分布进行删除(按值删除)

$or : 或者指令, 该指令通常作为字典的键, 其对应的值是一个'列表'结构,列表中每一个元素之间是'并列'的关系.

"在字典中所有的键值对之间代表的是一种'并且'的关系."

.sort('age',1): 将查找之后的结果按照指定的字段进行排序, 1为升序,-1为降序

.skip(m).limit(n): 将查找结果的取值显示为,跳过m条数据,显示n条数据.  即只显示m+1~m+1+n的数据
'''

#查询年龄在[5,25]之间的所有数据
res1 = my_infor.find({
    'age':{'$gte':5,"$lte":25}
})
#查询年龄15以下或25以上,name是jiesen的数据
res2 = my_infor.find({
    '$or':[
        {'age':{'$gte':25}},
        {'age':{'$lte':15}}
    ],
    'name':'jiesen'
})
# $in: 提取在指定内容中的数据
res3 = my_infor.find({
    'age':{'$in':(15,23)}
})
res4 = my_infor.find({
    'score':{'$all':[12,15,90]}
})

# 示例
import pymongo
# 连接数据库
mongo_uri = 'mongodb://localhost:27017/'
client = pymongo.MongoClient(mongo_uri)
# 得到所有db的列表
client.list_database_names()
# 得到某个db下的所有集合列表
db = client.my_db
db.list_collection_names()
# 得到该集合的所有数据记录数
table=client.my_db.my_infor
table.count_documents({})
# 列出一条记录的所有keys
first_instance = table.find_one()
first_instance.keys()

 类似资料: