pymongo 常用操作函数
pymongo 是 mongodb 的 python Driver Editor.
记录下学习过程中感觉以后会常用多一些部分,以做参考。
1. 连接数据库
要使用pymongo最先应该做的事就是先连上运行中的 mongod 。
- 创建一个 .py 文件,首先导入 pymongo:
from pymongo import MongoClient
- 创建一个连接到 mongod 到客户端:
client = MongoClient()
或者:
client = MongoClient("mongodb://mongodb0.example.net:27019")
- 连接数据库:
# 假设要连接的数据库名为 primer
db = client.primer
或者:
db = client['primer']
- 连接到对应的数据集:
coll = db.dataset
coll = db['dataset']
至此,已经完整对连接了数据库和数据集,完成了初识化的操作。
2. 插入数据
insert_one(document)
insert_many(documents, ordered=True)
insert_one(document)
在 pymongo 中的插入函数并不像 mongo shell 中完全一样,所以需要注意一下:
from datetime import datetime
result = db.restaurants.insert_one(
{
"address": {
"street": "2 Avenue",
"zipcode": "10075",
"building": "1480",
"coord": [-73.9557413, 40.7720266]
},
"borough": "Manhattan",
"cuisine": "Italian",
"grades": [
{
"date": datetime.strptime("2014-10-01", "%Y-%m-%d"),
"grade": "A",
"score": 11
},
{
"date": datetime.strptime("2014-01-16", "%Y-%m-%d"),
"grade": "B",
"score": 17
}
],
"name": "Vella",
"restaurant_id": "41704620"
}
)
其中返回的结果:result 中是一个:InsertOneResult 类:
class pymongo.results.InsertOneResult(inserted_id, acknowledged)
其中 inserted_id
是插入的元素多 _id
值。
insert_many(documents, ordered=True)
result = db.test.insert_many([{'x': i} for i in range(2)])
查询数据
find(filter=None, projection=None, skip=0, limit=0,
no_cursor_timeout=False, cursor_type=CursorType.NON_TAILABLE,
sort=None, allow_partial_results=False, oplog_replay=False,
modifiers=None, manipulate=True)
find_one(filter_or_id=None, *args, **kwargs)
find
find 查询出来的是一个列表集合。
cursor = db.restaurants.find()
for document in cursor:
print(document)
# 查询字段是最上层的
cursor = db.restaurants.find({"borough": "Manhattan"})
# 查询字段在内层嵌套中
cursor = db.restaurants.find({"address.zipcode": "10075"})
- 操作符查询
cursor = db.restaurants.find({"grades.score": {"$gt": 30}})
cursor = db.restaurants.find({"grades.score": {"$lt": 10}})
# AND
cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"})
cursor = db.restaurants.find(
{"$or": [{"cuisine": "Italian"}, {"address.zipcode": "10075"}]})
find_one
返回的是一个JSON式文档,所以可以直接使用!sort
排序时要特别注意,使用的并不是和mongo shell的一样,而是使用了列表,
当排序的标准只有一个,且是递增时,可以直接写在函数参数中:
pymongo.ASCENDING = 1
pymongo.DESCENDING = -1
cursor = db.restaurants.find().sort("borough")
cursor = db.restaurants.find().sort([
("borough", pymongo.ASCENDING),
("address.zipcode", pymongo.DESCENDING)
])
更新文档
更新文档的函数有三个(不能更新 _id
字段)
update_one(filter, update, upsert=False)
update_many(filter, update, upsert=False)
replace_one(filter, replacement, upsert=False)
find_one_and_update(filter, update, projection=None, sort=None, return_document=ReturnDocument.BEFORE, **kwargs)
update_one
返回结果是一个:UpdateResult
,如果查找到多个匹配,则只更新
第一个!
result = db.restaurants.update_one(
{"name": "Juni"},
{
"$set": {
"cuisine": "American (New)"
},
"$currentDate": {"lastModified": True}
}
)
result.matched_count
10
result.modified_count
1
update_many
查找到多少匹配,就更新多少。
result = db.restaurants.update_many(
{"address.zipcode": "10016", "cuisine": "Other"},
{
"$set": {"cuisine": "Category To Be Determined"},
"$currentDate": {"lastModified": True}
}
)
result.matched_count
20
result.modified_count
20
replace_one
result = db.restaurants.replace_one(
{"restaurant_id": "41704620"},
{
"name": "Vella 2",
"address": {
"coord": [-73.9557413, 40.7720266],
"building": "1480",
"street": "2 Avenue",
"zipcode": "10075"
}
}
)
result.matched_count
1
result.modified_count
1
find_one_and_update
返回更新前的文档
db.test.find_one_and_update(
{'_id': 665}, {'$inc': {'count': 1}, '$set': {'done': True}})
{u'_id': 665, u'done': False, u'count': 25}}
删除文档
删除时主要有两个:
delete_one(filter)
delete_many(filter)
drop()
find_one_and_delete(filter, projection=None, sort=None, **kwargs)
find_one_and_replace(filter, replacement, projection=None, sort=None, return_document=ReturnDocument.BEFORE, **kwargs)
delete_one
result = db.test.delete_one({'x': 1})
result.deleted_count
1
delete_many
result = db.restaurants.delete_many({"borough": "Manhattan"})
result.deleted_count
10259
# 删除全部
result = db.restaurants.delete_many({})
drop()
删除整个集合,是drop_collection()
的别名
db.restaurants.drop()
find_one_and_delete
db.test.count({'x': 1})
2
db.test.find_one_and_delete({'x': 1})
{u'x': 1, u'_id': ObjectId('54f4e12bfba5220aa4d6dee8')}
db.test.count({'x': 1})
find_one_and_replace
>>> for doc in db.test.find({}):
... print(doc)
...
{u'x': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
>>> db.test.find_one_and_replace({'x': 1}, {'y': 1})
{u'x': 1, u'_id': 0}
>>> for doc in db.test.find({}):
... print(doc)
...
{u'y': 1, u'_id': 0}
{u'x': 1, u'_id': 1}
{u'x': 1, u'_id': 2}
索引操作
索引主要有创建索引和删除索引:
create_index(keys, **kwargs)
create_indexes(indexes)
drop_index(index_or_name)
drop_indexes()
reindex()
list_indexes()
index_information()
create_index
my_collection.create_index("mike")
my_collection.create_index([("mike", pymongo.DESCENDING),
... ("eliot", pymongo.ASCENDING)])
my_collection.create_index([("mike", pymongo.DESCENDING)],
... background=True)
create_indexes
>>> from pymongo import IndexModel, ASCENDING, DESCENDING
>>> index1 = IndexModel([("hello", DESCENDING),
... ("world", ASCENDING)], name="hello_world")
>>> index2 = IndexModel([("goodbye", DESCENDING)])
>>> db.test.create_indexes([index1, index2])
["hello_world"]
drop_index
index_or_name
: 索引编号或者索引的name
my_collection.drop_index("mike")
drop_indexs
删除所有索引reindex
重构索引,尽量少用,如果集合比较大多话,会很耗时耗力.
for index in db.test.list_indexes():
... print(index)
...
SON([(u'v', 1), (u'key', SON([(u'_id', 1)])),
(u'name', u'_id_'), (u'ns', u'test.test')])
附录
- 博客园-Blog
- GitHub-Blog
- 关注微信订阅号:
pymongo 常用操作函数的更多相关文章
- [转]pymongo常用操作函数
pymongo 是 mongodb 的 python Driver Editor.记录下学习过程中感觉以后会常用多一些部分,以做参考. 1. 连接数据库 要使用pymongo最先应该做的事就是先连上运 ...
- byte数据的常用操作函数[转发]
/// <summary> /// 本类提供了对byte数据的常用操作函数 /// </summary> public class ByteUtil { ','A','B',' ...
- Python--set常用操作函数
python提供了常用的数据结构,其中之一就是set,python中的set是不支持索引的.值不能重复.无需插入的容器. 简单记录下set常用的操作函数: 1.新建一个set: set("H ...
- JavaScript之数组的常用操作函数
js对数组的操作非常频繁,但是每次用到的时候都会被搞混,都需要去查相关API,感觉这样很浪费时间.为了加深印象,所以整理一下对数组的相关操作. 常用的函数 concat() 连接两个或更多的数组,并返 ...
- MYSQL常用操作函数的封装
1.mysql常用函数封装文件:mysql.func.php <?php /** * 连接MYSQL函数 * @param string $host * @param string $usern ...
- R语言︱基本函数、统计量、常用操作函数
先言:R语言常用界面操作 帮助:help(nnet) = ?nnet =??nnet 清除命令框中所有显示内容:Ctrl+L 清除R空间中内存变量:rm(list=ls()).gc() 获取或者设置当 ...
- JavaScript之字符串的常用操作函数
字符串的操作在js中非常繁琐,但也非常重要.在使用过程中,也会经常忘记,今天就对这个进行一下整理. String 对象 String 对象用于处理文本(字符串). new String(s); // ...
- javascript 数组的常用操作函数
join() Array.join(/* optional */ separator) 将数组转换为字符串,可带一个参数 separator (分隔符,默认为“,”). 与之相反的一个方法是:Stri ...
- JavaScript字符串常用操作函数之学习笔记
字符串简介 使用英文单引号或双引号括起来,如:’Hello’,”World”,但是不能首尾的单引号和双引号必须一致,交错使用,如果要打印单引号或者双引号,可以使用转义字符\’(单引号),\”(双引号) ...
随机推荐
- 爬虫之自动生成url
Object.extend=function(props){ //继承父类 var prototype=Object.create(this.prototype) //初始化函数ctor var _C ...
- 【网络】默认路由、RIPv2、OSPF、EIGRP配置(全网全通)
1:默认路由 遇到问题:给r2配置向右的单项默认路由,通过PC1去ping主机PC2,一直显示Request timed out, 解决方法:r2配置如下: r2(config)#ip route 0 ...
- PIE 支持项目介绍
目前PIE SDK已经支持了气象.海洋.农业.水利.测绘等多个行业应用. [气象应用-和WebGIS程序界面结合] [气象应用-积雪监测] [气象应用-洪涝监测] [气象应用-专题模板] [气象应用- ...
- easyUI--datagrid 实现按键控制( enter tab 方向键 )
1.表格定义时加上 onClickCell: onClickCell,2.定义列时加入编辑器3.引入 key.js 即可使用 enter 键 或者向下箭头 选中单元格下移 选中单元格上移 tab键 选 ...
- (转)Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...
- (转)通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加
通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加 原文:http://www.21yunwei.com/archives/4773 有一个朋友问我如何批量创建用户和设置密码 , ...
- pat1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- Prestashop使用心得
如果对Prestashop好奇的小伙伴快点进来看看吧,我开始接触了Prestashop这个开源的系统,这个一个非常棒的电商系统.因为我对这个Prestashop系统完全没有了解,但是上网却看不到太多的 ...
- CentOS-7 本地yum源挂载
在Linux无法连接到互联网时,手动安装依赖是及其麻烦的一件事,需要花费大量的时间寻找rpm包.但在配置本地yum源后,绝决依赖问题就会变得非常简单. 一.准备 centos-7.ISO镜像文件: 二 ...
- javascript小数相减出现一长串的小数位数
我们要修改网页某个数据的显示格式,需要两步操作: 1.在JS中通过$('.class1 .class2 li:eq(2) span.value').text().trim();类似的语句获取到数据内容 ...