pymongo基础使用方法
本文通过文章同步功能推送至博客园,排版可能会有所错误,敬请见谅!
1.客户端初始化
初始化MongoDB客户端
client = pymongo.MongoClient('localhost',27017)
2.创建数据库和数据表
pymongo支持以字典或属性的形式(内置了__item__和__getattr__方法)连接数据库和数据表,若该数据库/表不存在,则创建。
db = client['mydatabase']
sheet = db['sheetname']
3.数据的增加
在pymongo中,对数据的增删改查,全部在数据表对象(sheet)中执行。
MongoDB属于非关系型数据库,它被常用于存储JSON结构,可以很方便的存储序列化信息。
· insert_one方法
· insert_many方法
· insert方法
(1)insert_one插入一条记录
insert_one(document, bypass_document_validation=False, session=None)
document往往是一条以字典形式的数据
可以是
data = {
'city': soup.find(attrs={'name': 'location'})['content'].split('city=')[-1].split(';')[0],
'district':soup.title.get_text().split('短租房')[0][1:] + '区',
'title': soup.select('#indexPage
> div > div.houseIntroduce > div.border_b > p')[-1].get_text().strip(),
'addr': soup.select('#indexPage
> div > section > p')[0].get_text().strip(),
'price': int(soup.select('div.priceBox > div > div > span.newPcrice')[0].get_text().strip()),
'introduce':soup.select('div.houseIntroduceBox
> div.houseIntroduce_P_con > p')[0].get_text().strip(),
'tags':[],
}
(2)insert_many插入多条记录
insert_one(document, ordered=True, bypass_document_validation=False,
session=None)
document是一个可迭代对象,通常是数据组成的列表或者元组。
ordered如果为真,数据将按照提供的顺序连续插入数据表,否则以任意顺序。
(3)insert方法
在pymongo3.6.1中,insert方法是不被赞成的方法,请使用insert_one或者insert_many。
4.数据的删除
使用下面几种方法可以删除任意条数据:
· delete_one方法
· delete_many方法
(1)delete_one删除一条记录
delete_one(filter, collation=False, session=None)
filter为字典形式的查询对象
(2)delete_many删除多条记录
delete_many(filter, collation=False, session=None)
filter为字典形式的查询对象
(3)find_one_and_delete找到并删除一条数据
find_one_and_delete(filter, projection=None, sort=None, session=None)
5.数据的修改
· replace_one方法
· update_one方法
· update_many方法
(1)replace_one替换一条记录
replace_one(filter, replacement, upsert=False,
bypass_document_validation=False, collation=None,
session=None)
filter是过滤条件
replacement是替换后的数据
upsert如果为真,则当找不到过滤条件时,会直接插入替换后的数据。
(2)update_one修改一条记录数据
与replace_one替换方法的简单粗暴相比,update_one更注重于修改一条数据本身,update方法系列也支持更高级的操作符。
update_one(filter, update, upsert=False,
bypass_document_validation=False,
collation=None, array_filters=None, session=None)
filter是过滤条件
update是要修改字段的数据集合(通常以字典表现)
update支持MongoDB的操作符(详见MongDB的操作运算符),这是一个非常重要的特性。
6.数据的查询
· find方法
· find_one方法
(1)find查询所有匹配数据
sheet.find({'district':'岳麓区', 'deposit':{'$lt':301}})
(2)find_one查询匹配的第一条数据
使用方法与find一致。
在数据的查询中,主要掌握MongoDB的操作运算符才是灵活使用的关键点。
7.其他内置方法
· count() - 返回查询结果数量
· sorted()
- 接收一个字段,按其排序
· create_index() - 创建索引详见官方文档
8.补充:MongDB的操作运算符
参考资料:mongodb常用操作符
(1)比较操作符
· $gt - 匹配字段值大于指定值的文档( > )
· $lt - 匹配字段值大于指定值的文档( < )
· $gte - 匹配字段值大于等于指定值的文档( >= )
· $lte - 匹配字段值小于等于指定值的文档( <= )
· $eq - 匹配字段值等于指定值的文档( = )
· $in - 匹配字段值等于指定数组中的任何值
o { field: { $in: [<value1>, <value2>, ... <valueN> ] } }
· $ne - 匹配字段值不等于指定值的文档,包括没有这个字段的文档
· $nin - 字段值不在指定数组或者不存在
o { field: { $nin: [<value1>, <value2>, ... <valueN> ] } }
(2)逻辑操作符
· $or - 文档至少满足其中的一个表达式
o { $or: [ { <expression1> }, ... , { <expressionN> } ] }
· $and - 文档同时满足所有的表达式
o { $and: [ { <expression1> }, ... , { <expressionN> } ] }
· $nor - 字段值不匹配所有的表达式的文档,包括那些不包含这些字段的文档
o { $nor: [ { <expression1> }, ... , { <expressionN> } ] }
(3)元素操作符
· $type - 匹配字段值为指定数据类型的文档(详见)
o { field: { $type: <BSON type number> | <String alias> } }
o sheet.find({'deposit':{'$type':'string'}})
o sheet.find({'deposit':{'$type':2}})
· $exists - 匹配字段存在的数据
(4)评估操作符
· $mod - 匹配字段值被除有指定的余数的文档
o { field: { $mod: [ divisor(除数), remainder(余数) ] } }
· $regex - 正则表达式可以匹配到的文档
o { <field>: { $regex: 'pattern', $options: '<options>' } }
· $text - 针对创建了全文索引的字段进行文本搜索
附表1:MongoDB数据类型
|
Type |
Number |
Alias |
Notes |
||
|
Double |
1 |
“double” |
|||
|
String |
2 |
“string” |
|||
|
Object |
3 |
“object” |
|||
|
Array |
4 |
“array” |
|||
|
Binary data |
5 |
“binData” |
|||
|
Undefined |
6 |
“undefined” |
Deprecated. |
||
|
ObjectId |
7 |
“objectId” |
|||
|
Boolean |
8 |
“bool” |
|||
|
Date |
9 |
“date” |
|||
|
Null |
10 |
“null” |
|||
|
Regular Expression |
11 |
“regex” |
|||
|
DBPointer |
12 |
“dbPointer” "182" valign="top" style="border:solid #A3A3A3 1.0pt;background:white;"> JavaScript |
13 |
“javascript” |
|
|
Symbol |
14 |
“symbol” |
Deprecated. |
||
|
JavaScript (with scope) |
15 |
“javascriptWithScope” |
|||
|
32-bit integer |
16 |
“int” |
|||
|
64-bit integer |
18 |
“long” |
|||
|
Decimal128 |
19 |
“decimal” |
New in version 3.4. |
||
|
Min key |
-1 |
“minKey” |
|||
|
Max key |
127 |
“maxKey” |
pymongo基础使用方法的更多相关文章
- C#基础之方法和参数
C#基础之方法和参数 接上一篇<C#基础之类型和成员基础以及常量.字段.属性> 实例方法.静态方法 C#中的方法分为两类,一种是属于对象(类型的实例)的,称之为实例方法,另一种是属于类型的 ...
- laravel获取当前的url以及当前的基础域名方法汇总
原文地址:https://phpartisan.cn/news/58.html 来源于:laravel获取当前的url以及当前的基础域名方法汇总 - Laravel学习网 laravel中我们常常需要 ...
- 千锋教育Vue组件--vue基础的方法
课程地址: https://ke.qq.com/course/251029#term_id=100295989 <!DOCTYPE html> <html> <head& ...
- SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流
SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...
- [UWP开发]NavigationView基础使用方法
原文:[UWP开发]NavigationView基础使用方法 [UWP开发]NavigationView基础使用方法 NavigationView是秋季创意者更新(16299)引入的新控件,用于生成W ...
- Scrapy里Selectors 四种基础的方法
在Scrapy里面,Selectors 有四种基础的方法xpath():返回一系列的selectors,每一个select表示一个xpath参数表达式选择的节点css():返回一系列的selector ...
- java在acm中常用基础技巧方法
java在acm中常用基础技巧方法 如果学到了新的技巧,本博客会更新~ input input-std @Frosero import java.util.*; public class Main { ...
- 2019-1-29-Moq基础-判断方法被执行
title author date CreateTime categories Moq基础 判断方法被执行 lindexi 2019-01-29 16:29:57 +0800 2019-01-17 1 ...
- Quartz.Net的基础使用方法,多任务执行继续扩展
前一篇随笔讲了Quartz多任务的简单实现 Quartz.Net的基础使用方法,多任务执行 这一篇,来简单对前一篇进行一下简单的扩展 看了前一篇的代码会发现,每次新增一个任务还要去GetJobs方法里 ...
随机推荐
- windows 下 安装 Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...
- macbook配置homebrew
打开homebrew官网,https://brew.sh/将安装脚本复制到命令行中,执行即可 命令正在运行,下载应用,如果在安装应用时,下载速度很慢,可以参考https://blog.csdn.net ...
- 在基于acpi的linux系统上如何检查当前系统是否支持深度睡眠?
答: 执行以下命令: # dmesg|grep -i acpi |grep -i supports (S3表示支持深度睡眠) ACPI: (supports S0 S1 S3 S4 S5)
- mp4文件格式解析(转)
mp4文件格式解析 MP4文件格式带数据详解 MP4文件格式的解析,以及MP4文件的分割算法
- JS pc端和移动端共同实现复制到剪贴板功能实现
JS pc端和移动端实现复制到剪贴板功能实现 在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了, ...
- angular之Rxjs异步数据流编程入门
Rxjs介绍 参考手册:https://www.npmjs.com/package/rxjs 中文手册:https://cn.rx.js.org/ RxJS 是 ReactiveX 编程理念的 Jav ...
- HmacSHA256算法(C# 和 Java)
Java代码: /** * HmacSHA256算法,返回的结果始终是32位 * @param key 加密的键,可以是任何数据 * @param content 待加密的内容 * @return 加 ...
- css调用字体 没装微软雅黑,用css写@font-face让其能显示微软雅黑字体
在设计布局网页时 经常想要用一些比较好看的字体,比如微软雅黑,这个字体在近年来在网页设计中运用越来越平常, 然而所使用的字体也只有自己能看到 到别的机子上 又恢复了原来的宋体神马的. 经过一位高手的提 ...
- Hibernatne 缓存中二级缓存简单介绍
hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了. 二级缓存是Sessio ...
- 解决kalilinux:“下列签名无效: KEYEXPIRED 1425567400"
Kali linux由于太长时间未更新,而出现GPG错误 KEYEXPIRED 1425567400.经检查源未出现问题可以解析,deb也不冲突,就是密钥过期了. 解决方式 使用一条命令,添加新的密钥 ...