# 安装
~~~
pip install pymongo
~~~
[教程][1]
# 使用
## 引入pymongo
~~~
from pymongo import MongoClient
~~~
## 创建连接
使用MongoClient创建一个连接
~~~
client = MongoClient()
~~~
如果你没有特别为MongoClient指定参数,MongoClient将使用MongoDB默认参数即localhost接口和27017端口。
你可以使用一个完整的MongoDB URI来定义连接:
~~~
client = MongoClient("mongodb://mongodb0.example.net:27019")
~~~
这个MongoClient代表了一个运行于mongodb.example.net端口号为27019的MongoDB连接。
## 访问数据库对象
第一个你用pymongo来交互的基本类是Database,它代表了MongoDB中的数据库(database)结构。数据库保存了逻辑上相关的集合组。MongoDB将在第一次使用新的数据库的时候自动创建它。
你可以使用属性访问的方式,赋值一个数据库(例如名字为primer)给本地变量db,如下所示:
~~~
db = client.primer
~~~
你也可以使用字典形式访问一个数据库,这会移除Python特有的命名限制,如下所示:
~~~
db = client['primer']
~~~
## 访问集合对象
第二个你将使用pymongo进行交互的基本类是Collection,它代表了MongoDB中的集合(collection)结构。集合(collection)保存了逻辑上相关的文档组。
你可以直接使用字典形式访问集合或者通过一个访问一个数据库对象的属性来访问集合,如下所示:
~~~
db.dataset
db['dataset']
~~~
你也可以给一个变量进行赋值,以在其他地方使用这个集合,如下所示:
~~~
coll = db.dataset
coll = db['dataset']
~~~
## 查询
```
results = collection.find()
results = collection.find_one()
results = collection.find({'age': {'$gt': 20}})
```
![](https://ws1.sinaimg.cn/large/006tNc79gy1g26tqgzdrxj30u00gnjs8.jpg)
另外,还可以进行正则匹配查询。例如,查询名字以M开头的学生数据,示例如下:
~~~
results = collection.find({'name': {'$regex': '^M.*'}})
~~~
这里使用`$regex`来指定正则匹配,`^M.*`代表以M开头的正则表达式。
这里将一些功能符号再归类为下表。
![](https://ws1.sinaimg.cn/large/006tNc79gy1g26trqqxh6j30u00o4wg2.jpg)
## 对结果进行排序
要指定结果集的顺序,可以通过追加`sort()`方法进行查询。给`sort()`方法传递需要排序的字段和配需类型等。
~~~
pymongo.ASCENDING表示升序排序。
pymongo.DESCENDING表示降序排序。
~~~
如果要通过多个键星星排序,可以传递键的列表和以及对应的排序类型的列表。举例来说,如下操作将返回restaurants集合中所有的文档,并且先通过borough字段进行升序排序,然后在每个borough内,通过"address.zipcode"字段进行升序排序。
~~~
import pymongo
cursor = db.restaurants.find().sort([
("borough", pymongo.ASCENDING),
("address.zipcode", pymongo.ASCENDING)
])
~~~
> find返回的是可迭代对象
## 删除
删除操作比较简单,直接调用`remove()`方法指定删除的条件即可,此时符合条件的所有数据均会被删除。示例如下:
~~~
result = collection.remove({'name': 'Kevin'})
print(result)
~~~
运行结果如下:
~~~
{'ok': 1, 'n': 1}
~~~
另外,这里依然存在两个新的推荐方法——`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)
~~~
## update
`update_one()`方法和`update_many()`方法,用法更加严格,它们的第二个参数需要使用`$`类型操作符作为字典的键名,示例如下:
~~~
condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 26
result = collection.update_one(condition, {'$set': student})
print(result)
print(result.matched_count, result.modified_count)
~~~
### update_one
```
condition = {'age': {'$gt': 20}}
result = collection.update_one(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)
```
### update_many
~~~
col.update({"_id": {"$gt": 10}}, {"$set": {"content": "aaaaaaa"}}, multi=True)
对应 db.bar.update({"_id": {"$gt": 10}}, {"$set": {"content": "xxx"}}, false,true)
~~~
## 问题
~~~
ubuntu14.04 解决安装pymongo报错 ImportError: cannot import name MongoClient
apt-get install python-pymongo
~~~
[1]:https://www.cnblogs.com/zhouxuchen/p/5544227.html
- 前言
- 环境搭建
- pypi
- 打包
- Python 2 和 Python 3 的版本之间差别
- 项目
- 第一部分
- 第1章 基础
- Python安装
- python代码文件类型
- python对象
- 核心数据类型
- 核心数据类型--整型和浮点型
- 核心数据类型--字符串
- str.format
- 核心数据类型--列表
- 核心数据类型--元组
- 核心数据类型--字典
- 核心数据类型--集合
- 核心数据类型--文件对象
- 调用bash
- 标准输入输出
- str-repr
- 字符编码
- 迭代器和生成器
- 第2章 语句和语法
- 赋值语句
- if语句
- while语句
- for语句
- assert
- 第3章 函数
- 函数作用域
- 工厂函数
- 内置函数
- 递归
- 嵌套作用域和lambda
- 参数传递
- 函数式编程
- property可写与可读
- 第5章 模块
- 模块导入
- 模块命名空间
- 相对导入和绝对导入
- 模块重载
- 在模块中隐藏数据
- 过渡性重载
- 第6章 类
- 面向对象还是面向过程?
- 构造函数 析构函数
- call
- 运算符重载
- str()
- 待定
- 即时生成属性
- 多态
- 线程和进程
- thread模块
- threading模块
- threading线程锁
- 糖果机
- multiprocessing
- 阻塞非阻塞同步异步
- 单线程和多线程对比
- 生产者消费者模型
- 第二部分
- 获取系统资源信息
- 获取进程所占的物理内存
- dmidecode获取系统信息
- 网络编程
- 网络基础
- python中的套接字
- socket模块
- 第三部分 高级功能
- 闭包入门
- 闭包的应用
- 装饰器入门
- 装饰器应用
- 第四部分 项目实战
- graphite
- 模块
- collections
- datetime
- Enum
- faker
- fabric
- fileinput
- fire
- fnmatch
- getpass
- glob
- hashlib
- heapq
- json模块
- log
- os
- Paramiko
- parser
- platform
- pyyaml
- Queue
- random
- re
- 特殊符号和字符
- re模块
- shelves
- subprocess
- time
- urllib_urllib2_requests
- urllib urllib2
- requests
- 标准模块ConfigParser
- 扩展模块Mysqldb
- 扩展模块dns
- 扩展模块request
- uuid
- cacheout 缓存库
- delorean 时间
- 附录
- 内置函数
- python实现各种排序算法
- 常见报错
- pymongo
- pyrocksdb
- 常用
- ERROR