本文通过文章同步功能推送至博客园,排版可能会有所错误,敬请见谅!

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 - 针对创建了全文索引的字段进行文本搜索

附表1MongoDB数据类型

mestamp”

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基础使用方法的更多相关文章

  1. C#基础之方法和参数

    C#基础之方法和参数 接上一篇<C#基础之类型和成员基础以及常量.字段.属性> 实例方法.静态方法 C#中的方法分为两类,一种是属于对象(类型的实例)的,称之为实例方法,另一种是属于类型的 ...

  2. laravel获取当前的url以及当前的基础域名方法汇总

    原文地址:https://phpartisan.cn/news/58.html 来源于:laravel获取当前的url以及当前的基础域名方法汇总 - Laravel学习网 laravel中我们常常需要 ...

  3. 千锋教育Vue组件--vue基础的方法

    课程地址: https://ke.qq.com/course/251029#term_id=100295989 <!DOCTYPE html> <html> <head& ...

  4. SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流

    SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...

  5. [UWP开发]NavigationView基础使用方法

    原文:[UWP开发]NavigationView基础使用方法 [UWP开发]NavigationView基础使用方法 NavigationView是秋季创意者更新(16299)引入的新控件,用于生成W ...

  6. Scrapy里Selectors 四种基础的方法

    在Scrapy里面,Selectors 有四种基础的方法xpath():返回一系列的selectors,每一个select表示一个xpath参数表达式选择的节点css():返回一系列的selector ...

  7. java在acm中常用基础技巧方法

    java在acm中常用基础技巧方法 如果学到了新的技巧,本博客会更新~ input input-std @Frosero import java.util.*; public class Main { ...

  8. 2019-1-29-Moq基础-判断方法被执行

    title author date CreateTime categories Moq基础 判断方法被执行 lindexi 2019-01-29 16:29:57 +0800 2019-01-17 1 ...

  9. Quartz.Net的基础使用方法,多任务执行继续扩展

    前一篇随笔讲了Quartz多任务的简单实现 Quartz.Net的基础使用方法,多任务执行 这一篇,来简单对前一篇进行一下简单的扩展 看了前一篇的代码会发现,每次新增一个任务还要去GetJobs方法里 ...

随机推荐

  1. legend3---阿里云服务器配置多个网站项目

    legend3---阿里云服务器配置多个网站项目 一.总结 一句话总结: 就是和本机上面的一样,多个域名可以指向同一个ip,配置apache的时候记得ServerName配置域名,不要直接整ip 二. ...

  2. php的IP转换成整型函数ip2long()易出现负数

    php中将IP转换成整型的函数ip2long()容易出现问题,在IP比较大的情况下,会变成负数.如下<?php$ip = "192.168.1.2";$ip_n = ip2l ...

  3. android 上下滑动标题栏和状态栏改变颜色实现

    import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; ...

  4. Qt kdChart 甘特图案例

    KDChart  甘特图在Qt中的加载使用案例,代码来自官方 mainwindow.h /******************************************************* ...

  5. Javescript——变量声明的区别

    原文链接:ES6 Syntax and Feature Overview View on GitHub Keyword Scope Hoisting Can Be Reassigned Can Be ...

  6. Python与C/C++相互调用(python2 调c++那个试了ok)

    一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不经过 ...

  7. python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码

    python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...

  8. 重新认识Java 8的HashMap

    [转自]美团技术博客 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实 ...

  9. Docker - 在CentOS7中安装Docker

    在CentOS 7中安装Docker 1-确认系统信息 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname - ...

  10. Spark学习笔记0——简单了解和技术架构

    目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...