pymongo操纵MongoDB
官方网站:https://www.mongodb.com
官方文档:https://docs.mongodb.com
GitHub:https://github.com/mongodb
中文教程:http://www.runoob.com/mongodb/mongodb-tutorial.html
- RoboMongo/Robo 3T,它使用简单,功能强大,官方网站为https://robomongo.org/,下载链接为https://robomongo.org/download
- Studio 3T:简单易用,它同样具有方便的图形化管理界面,官方网站为https://studio3t.com,下载链接为https://studio3t.com/download/
pymongo
- GitHub:https://github.com/mongodb/mongo-python-driver
- 官方文档:https://api.mongodb.com/python/current/
- PyPI:https://pypi.python.org/pypi/pymongo
- 安装: pip install pymongo
连接MongoDB,指定数据库,指定集合
import pymongo # 1.导入数据包# 2.创建连接对象,port默认27017,加上配置的用户名和密码,否则会pymongo.errors.OperationFailure: not authorized on test to execute command
client = pymongo.MongoClient('mongodb://user:password@localhost:27017/') #client = pymongo.MongoClient(host='localhost', port=27017)# 另一种创建连接对象的方式,指定用户和权限方式还不清楚,暂时不推荐db = client.test # 3.指定数据库#db = client['test'] # 另一种指定数据库方式collection = db.students # 4.指定集合,声明了一个Collection对象#collection = db['students'] # 指定集合另一种方式
插入数据
1.插入一条数据
student = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male'
} # 将一条数据以字典形式表示result = collection.insert_one(student) # insert_one传入字典,返回InsertOneResult对象
print(result.inserted_id) # inserted_id属性获取数据_id,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性
2.插入多条数据
student1 = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male'
}student2 = {'id': '20170202','name': 'Mike','age': 21,'gender': 'male'
}result = collection.insert_many([student1, student2]) # insert_many传入列表,列表元素是字典,返回的类型是InsertManyResult
print(result.inserted_ids) # inserted_ids属性获取数据_id列表
查询
1.普通查询
- find_one()查询得到的是单个结果
result = collection.find_one({'name': 'Mike'})
- 根据ObjectId来查询,需要使用bson库里面的objectid
from bson.objectid import ObjectIdresult = collection.find_one({'_id': ObjectId('593278c115c2602667ec6bae')})
- find()多条数据的查询,返回Cursor类型,一个生成器对象
results = collection.find({'age': 20})
for result in results:print(result)
2.条件查询
- 比较查询
例如:
results = collection.find({'age': {'$gt': 20}}) # 查询年龄大于20的数据
符号 | 含义 | 示例 |
$lt | 小于 | {'age':{'$lt':20}} |
$gt | 大于 | {'age':{'$gt':20}} |
$lte | 小于等于 | {'age':{'$lte':20}} |
$gte | 大于等于 | {'age':{'$gte':20}} |
$ne | 不等于 | {'age':{'$ne':20}} |
$in | 在范围内 | {'age':{'$in':[20, 23]}} |
$nin | 不在范围内 | {'age':{'$nin':[20, 23]}} |
其他条件:
例如:
results = collection.find({'name': {'$regex': '^M.*'}}) # 正则匹配查询
符号 | 含义 | 示例 | 示例含义 |
$regex | 匹配正则表达式 | {'name': {'$regex': '^M.*'}} | name以M开头 |
$exists | 属性是否存在 | {'name': {'$exists': True}} | name属性存在 |
$type | 类型判断 | {'age': {'$type': 'int'}} | age的类型为int |
$mod | 数字模操作 | {'age': {'$mod': [5, 0]}} | 年龄模5余0 |
$text | 文本查询 | {'$text': {'$search': 'Mike'}} | text类型的属性中包含Mike字符串 |
$where | 高级条件查询 | {'$where': 'obj.fans_count == obj.follows_count'} | 自身粉丝数等于关注数 |
详细用法官方文档:https://docs.mongodb.com/manual/reference/operator/query/
- 计数
统计查询结果有多少条数据可以对查询结果调用count()方法
例如:
count = collection.find({'age': 20}).count()
- 排序
排序时,直接调用sort()方法,并在其中传入排序的字段及升降序标志.
例如:
results = collection.find().sort('name', pymongo.ASCENDING)
pymongo.ASCENDING指定升序,pymongo.DESCENDING指定降序排列
- 偏移
skip()方法偏移几个位置,比如偏移2,就忽略前两个元素,得到第三个及以后的元素
limit()方法指定要取的结果个数
可以配合使用选取结果范围
例如:
results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)
result = col.find().limit(1).skip(random.randint(0,col.count()))# 在集合中随机取一条数据
- 更新
update()方法,指定更新的条件和更新后的数据即可(官方不推荐)
例如:
condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 25
result = collection.update(condition, student)
print(result)
$set操作符对数据进行更新:
result = collection.update(condition, {'$set': student})
只更新student字典内存在的字段,如果不用$set的话,则会把之前的数据全部用student字典替换
update_one()方法,只会找到一条更新
第二个参数不能再直接传入修改后的字典,而是需要使用{'$set': student}这样的形式,其返回结果是UpdateResult类型。调用matched_count和modified_count属性,可以获得匹配的数据条数和影响的数据条数。
例如:
condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 26
result = collection.update_one(condition, {'$set': student})
print(result.matched_count, result.modified_count)
update_many()方法,则会将所有符合条件的数据都更新
注意:replace_one的使用
collection.replace_one(filter={'':item['']},replacement=item,upsert=True)
# filter根据哪个键进行更新
# replacement 更新后的set
# 效果和update_one第二个参数为item时类似,即只覆盖该条数据,未更新的数据将会被删除。
- 删除
remove()方法指定删除的条件即可,此时符合条件的所有数据均会被删除(官方不推荐)
delete_one()即删除第一条符合条件的数据,delete_many()即删除所有符合条件的数据
例如:
result = collection.delete_one({'name': 'Kevin'})
print(result)
print(result.deleted_count)
result = collection.delete_many({'age': {'$lt': 25}})
print(result.deleted_count) # deleted_count属性获取删除的数据条数
其他操作
- 组合方法
find_one_and_delete()、find_one_and_replace()和find_one_and_update(),它们是查找后删除、替换和更新操作
- 对索引进行操作
create_index()、create_indexes()和drop_index()等
详细用法文档:http://api.mongodb.com/python/current/api/pymongo/collection.html
原文:https://blog.csdn.net/qq_32392853/article/details/81519291
pymongo操纵MongoDB相关推荐
- mongo go 查询指定字段_使用PyMongo查询MongoDB数据库!
总览 我们将讨论如何使用PyMongo库查询MongoDB数据库. 我们将介绍MongoDB中的基本聚合操作. 介绍 随着互联网的全球普及,我们现在正在以前所未有的速度生成数据.因为执行任何类型的分析 ...
- 用pymongo对mongoDB增删改查(CRUD)
pymongo操作mongoDB的增删改查 | CRUD pymongo简介 连接本地mongoDB 连接远程MongoDB 数据库CRUD 使用现有数据库 增 删 改 查 集合CRUD 增 删 改 ...
- Python使用pymongo连接MongoDB数据库并进行操作
一.基本概述 目前电脑上已经下载了MongoDB数据库.navicat for mongodb作为mongoDB的可视化工具,形如navicat for mysql作为mysql的可视化工具. 使用P ...
- pymongo查询列表元素_使用PyMongo查询MongoDB数据库!
作者|LAKSHAY ARORA 编译|Flin 来源|analyticsvidhya 介绍 随着互联网的普及,我们现在正以前所未有的速度生成数据.因为执行任何类型的分析都需要我们从数据库中收集/查询 ...
- python使用pymongo读写mongodb
转载请注明出处:python使用pymongo读写mongodb 准备工作 在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库. PyMongo介绍 ...
- 使用pymongo连接mongodb时报错:pymongo.errors.OperationFailure: not authorized
连接本机或局域网部署的mongodb时可以用以下方法: 1 from urllib import parse 2 from pymongo import MongoClient 3 4 host = ...
- pymongo连接mongodb的replset
replset的一个目的是保持集群的健壮性,但是,因此需要通过合理的方式连接整个replset,才能在primary宕机的时候,自动启用secondary. 为此,pymongo提供了replica_ ...
- python下使用pymongo操作mongodb
为什么80%的码农都做不了架构师?>>> Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐. Mon ...
- 100天精通Python(进阶篇)——第40天:pymongo操作MongoDB数据库基础+代码实战
文章目录 一.安装pymongo库 二.数据库操作 1.连接数据库 2.数据库操作 3.集合操作 4.插入文档 插入一个文档 插入多个文档 插入指定 _id 的多个文档 5.查看文档 查询一条数据 查 ...
最新文章
- php网站挂linux,Linux环境下php实现给网站截图的方法
- UE4材质:纯数学算法实现水面水波扩散效果
- svn之迁移代码技巧
- multi task训练torch_Multi-task Learning的三个小知识
- 网络编程-Socket介绍
- 如何看待0.5元可买到身份匹配的人脸数据?
- viewpager中fragment的生命周期管理
- channelsftp实现两个xftp之间文件互传_基于Jsch实现Java操作linux服务器
- 企业微信API群机器人配置
- Stata:产生唯一数据编码的三种方法
- Python之ASCII码相关
- 发现谷歌学术搜索真好用啊
- 本人的月末结账步骤备忘
- 改善民生 住有所居(加快经济发展方式转变)
- 命令与征服:红色警戒3 解决游戏启动时界面黑屏,但右上角有五角星电脑卡死的问题——hosts
- 什么是项目集(PgMP)?
- 每日辣评:快手和抖音、爱奇艺巨亏、搜狗输入法变声功能、贝佐斯
- Android: SQLite + ListView 实现 新闻 App
- 对抗生成网络(GAN)简介及生成数字实战
- python bitwise operator 位运算
热门文章
- Reloaded(重启)
- 20190配电网设备标准化设计 0.4KV低压开关柜中 综合监测装置要求
- android定时提醒功能,Android后台定时提醒功能实现
- MYIE2拖拽搜索中文关键词google乱码的解决方法
- UIStoryboardSegue(多控制器)
- ORACLE存储过程详解----我看过最详细的存储过程
- 餐饮收银管理系统如何连接mysql_基于jsp+mysql+Spring+mybatis的SSM餐厅点餐收银管理系统...
- 2022.12.5最新省市区json字符串
- OneThousand - 去中心化的抽奖
- 【计算机视觉的修炼秘笈】深度好文,持续更新