请根据笔记的写作日期,选择性阅读。
作者:
vaporzfy
写作日期:2018-12-27软件版本:mongodb@4.0.4Python@3.6.7pymongo@3.7.1参考:PyMongo 3.7.2 TutorialUpdate Operators
pymongo
PyMongo is a Python distribution containing tools for working with MongoDB, and is the recommended way to work with MongoDB from Python. This documentation attempts to explain everything you need to know to use PyMongo.PyMongo 是一个 Python 发行版,包含用于处理 MongoDB 的工具 ,是从 Python 中使用 MongoDB 的推荐方法。MongoDB 是由 C++ 语言编写的非关系型数据库。以本地的 hello 库的 students 集合为例,端口为27017。
一、连接
# 导入 pymongo
importpymongo
# 连接 mongodb
client=pymongo.MongoClient(host='localhost',port=27017)
二、指定数据库
# 指定为 hello 数据库
db=client.hello
等价于:
# 指定为 hello 数据库
db=client["hello"]
三、指定集合
# 指定为 students 数据库
collection=db.students
等价于:
# 指定为 students 数据库
collection=db["students"]
四、插入数据
student={
'name':'apple',
'age':18,
'gender':'male'
}
1. 插入一条
ret=collection.insert_one(student)
2. 插入多条
student1={
'name':'cherry',
'age':18,
'gender':'male'
}
student2={
'name':'orange',
'age':17,
'gender':'male'
}
student3={
'name':'grape',
'age':17,
'gender':'male'
}
ret=collection.insert_many([student1,student2,student3])
五、查询
1. 查询一条
ret=collection.find_one({'name':'apple'})
# 查看查询到数据
print(ret)
输出结果:{'_id': ObjectId('5c249dbc327a65247254dfc2'), 'name': 'apple', 'age': 18, 'gender': 'male'}
2. 查询多条
ret=collection.find({'age':18})
# 查看查询到数据
ret=[itemforiteminret]
print(ret)
输出结果:[{'_id': ObjectId('5c249dbc327a65247254dfc2'), 'name': 'apple', 'age': 18, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc3'), 'name': 'cherry', 'age': 18, 'gender': 'male'}]返回的为一个迭代器。
3. 条件筛选
条件筛选:
# 查询年龄大于17的学生
ret=collection.find({'age':{'$gt':17}})
# 查看查询到数据
ret=[itemforiteminret]
print(ret)
输出结果:[{'_id': ObjectId('5c249dbc327a65247254dfc2'), 'name': 'apple', 'age': 18, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc3'), 'name': 'cherry', 'age': 18, 'gender': 'male'}]
4. 正则表达式筛选
正则表达式筛选:
# 查询 name 以 a 开头的学生
ret=collection.find({'name':{'$regex':'^a.*'}})
# 查看查询到数据
ret=[itemforiteminret]
print(ret)
输出结果:[{'_id': ObjectId('5c249dbc327a65247254dfc2'), 'name': 'apple', 'age': 18, 'gender': 'male'}]
六、计数
注意:pymongo v3.7.1 版本中 count() 不可用。所有计数:
# 旧方法 collection.find().count() 不可用
count=collection.count_documents({})
print(count)
输出结果:4条件筛选计数:
# 旧方法 collection.find({'age': 18}).count() 不可用
count=collection.count_documents({"age":18})
print(count)
输出结果:2
七、排序
在查询结果之后调用 sort() 函数即可。参数:
pymongo.ASCENDING:升序
pymongo.DESCENDING:降序
ret=collection.find().sort('name',pymongo.ASCENDING)
# 查看查询到数据
ret=[itemforiteminret]
print(ret)
输出结果:[{'_id': ObjectId('5c249dbc327a65247254dfc2'), 'name': 'apple', 'age': 18, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc3'), 'name': 'cherry', 'age': 18, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc5'), 'name': 'grape', 'age': 17, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc4'), 'name': 'orange', 'age': 17, 'gender': 'male'}]
八、偏移
在查询结果之后,skip() 可以跳过指定的偏移量。
# 跳过前2个元素,得到第3个及之后的元素
ret=collection.find().sort('name',pymongo.ASCENDING).skip(2)
# 查看查询到数据
ret=[itemforiteminret]
print(ret)
输出结果:[{'_id': ObjectId('5c249dc1327a65247254dfc5'), 'name': 'grape', 'age': 17, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc4'), 'name': 'orange', 'age': 17, 'gender': 'male'}]
# 配置 limit() 限制结果个数为2个
results=collection.find().sort('name',pymongo.ASCENDING).skip(2).limit(2)
# 查看查询到数据
ret=[itemforiteminret]
print(ret)
[{'_id': ObjectId('5c249dc1327a65247254dfc5'), 'name': 'grape', 'age': 17, 'gender': 'male'}, {'_id': ObjectId('5c249dc1327a65247254dfc4'), 'name': 'orange', 'age': 17, 'gender': 'male'}]
九、更新
更新的数据需要配合使用,比如 Fields 的的参数如下:更对的参数可以查看官方文档 Update Operators
1. 更新一条
1.1 原地修改
condition={'name':'apple'}
ncondition={'age':12}
result=collection.update_one(condition,{'$set':ncondition})
# 匹配的条数,影响的条数
print(result.matched_count,result.modified_count)
输出结果:1 1注意:replace_one() 同样是更新,但是如果使用 replace_one(),将只覆盖该条数据,未更新的数据将会被删除。1.2 查询后修改
condition={'name':'apple'}
student=collection.find_one(condition)
student['age']=12
result=collection.update_one(condition,{'$set':student})
# 匹配的条数,影响的条数
print(result.matched_count,result.modified_count)
输出结果:1 1
2. 更新多条
# 将年龄大于18的学生年龄都修改为16
condition={'age':{'$gt':17}}
result=collection.update_many(condition,{'$set':{'age':16}})
# 匹配的条数,修改的条数
print(result.matched_count,result.modified_count)
输出结果:2 2
十、删除
1. 删除一条
result=collection.delete_one({'name':'apple'})
# 删除的条数
print(result.deleted_count)
输出结果:
2. 删除多条
result=collection.delete_many({'age':{'$lt':25}})
# 删除的条数
print(result.deleted_count)
输出结果:4
领取专属 10元无门槛券
私享最新 技术干货