首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pymongo的简单使用

请根据笔记的写作日期,选择性阅读。

作者:

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181227G180EO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券