Pymongo 模块集合(collection)常用函数

官方API介绍

from pymongo import MongoClient

client = MongoClient(host='127.0.0.1', port=27017)
collection = client[database_name][collection_name]

通过以上代码可以获取到 MongoDB 在数据库中存储的集合(collection),
以下函数均为collection可直接调用的方法

bulk_write(requests, ordered=True,):
对数据库采取一系列操作,比如 InsertOne, UpdateOne, UpdateMany, ReplaceOne, DeleteOne, Deletemany

for doc in db.test.find({}):
    print(doc)

# 输出
# {'x': 1, '_id': ObjectId('54f62e60fba5226811f634ef')}
# {'x': 1, '_id': ObjectId('54f62e60fba5226811f634f0')}


# DeleteMany, UpdateOne, and UpdateMany are also available.
from pymongo import InsertOne, DeleteOne, ReplaceOne
requests = [InsertOne({'y': 1}), DeleteOne({'x': 1}),
            ReplaceOne({'w': 1}, {'z': 1}, upsert=True)]
result = db.test.bulk_write(requests)
result.inserted_count
# 输出
# 1

result.deleted_count
# 输出
# 1

result.modified_count
# 输出
# 0

result.upserted_ids
# 输出
# {2: ObjectId('54f62ee28891e756a6e1abd5')}

for doc in db.test.find({}):
    print(doc)

# 输出
# {'x': 1, '_id': ObjectId('54f62e60fba5226811f634f0')}
# {'y': 1, '_id': ObjectId('54f62ee2fba5226811f634f1')}
# {'z': 1, '_id': ObjectId('54f62ee28891e756a6e1abd5')}

insert_one(document,):
添加一个文档

insert_many(documents,ordered=True,):
添加多个文档组成的可迭代对象

replace_one(filter, replacement,upsert=False,):
根据过滤条件替换数据
Notice:将参数 upsert 设置为 True时,如果满足过滤条件的文档不存在,replacement将作为新文档插入

update_one(filter, update, upsert=False,):
更新满足过滤条件的第一个文档
Notice:如果 upsert 为True,如果没有文档满足过滤条件,文档将作为新文档插入

update_many(filter, update, upsert=False,):
更新满足过滤条件的所有文档
Notice:如果 upsert 为True,如果没有文档满足过滤条件,文档将作为新文档插入

delete_one(filter, ):
删除满足过滤条件的第一个文档

delete_many(filter, ):
删除满足过滤条件的所有文档

aggregate(pipeline,):
对该集合内的数据进行聚合,用法和MongoDB Serveraggregate函数一样
pipeline:由 $group, $match, $project, $unwind, $sort 等聚合函数组成的列表

from pymongo import MongoClient
from pprint import pprint

db = MongoClient().aggregation_example
result = db.things.insert_many([{"x": 1, "tags": ["dog", "cat"]},
                                {"x": 2, "tags": ["cat"]},
                                {"x": 2, "tags": ["mouse", "cat", "dog"]},
                                {"x": 3, "tags": []}])

pipeline = [{"$unwind": "$tags"},
            {"$group": {"_id": "$tags", "count": {"$sum": 1}}},
            {"$sort": dict([("count", -1), ("_id", -1)])}]

pprint(list(db.things.aggregate(pipeline)))

# 查看聚合的详细信息
db.command('aggregate', 'things', pipeline=pipeline, explain=True)

collection.drop():
删除该集合

count_documents(filter,):
返回满足过滤条件的文档的数量

create_index(key,):
为集合在字段key上创建一个索引

# 使用多个字段创建索引
my_collection.create_index([
   ("mike", pymongo.DESCENDING),
   ("eliot", pymongo.ASCENDING)
],background=True,name='user_name')

drop_index(index_name,):
删除集合中已经存在的索引

drop_indexes():
删除集合中所有的索引(_id字段不会删除)

reindex()
更新所有索引(该操作会阻断其他操作)

list_indexes():
PyMongo游标的形式返回该集合所有的索引,

index_information():
以字典的形式返回该集合上的索引的相关信息

distinct(key, filter=None,):
返回在满足过滤条件的文档中,所有key的取值

drop():
删除该集合,drop_collection()的别名

find_one(filter=None,projection=None,):
返回满足过滤条件的第一个文档

find(filter=None, projection=None,skip=0,limit=0,sort=None,)
返回满足过滤条件的所有文档组成的 PyMongo 游标(类似于Python的生成器)

find_one_and_delete(filter,projection=None,):
删除满足过滤条件的第一个文档,并将删除的文档返回

list_collections():
返回一个类似于生成器的 Pymongo 游标,包含该数据库所有的集合

list_collection_names():
返回一个列表,包含该数据里所有的集合

map_reduce()
在该集合上使用map/reduce操作

options():
以字典的形式返回该集合的各项参数(使用create_index()创建集合时,指定的参数)

rename(new_name,)
重命名该集合

skip(N):
跳过返回的前N个文档

sort(key,direction=pymongo.ASCENDING):
对返回的文档进行排序,参数direction必须为pymongo.ASCENDING或者pymongo.DESCENDING

db.command():
向MongoDB服务器发出指令

db.command("serverStatus"):
返回MongoDB 服务器的状态

db.command("dbstats"):
返回该数据库的统计信息

弃用的函数

group(key,):建议使用aggragate()$group代替

count(): 建议使用count_documents()estimated_document_count()代替

insert():建议使用insert_one()insert_many()代替

save():建议使用insert_one()replace_one()代替

update():建议使用replace_one(),update_one()update_many()代替

remove():建议使用delete_one()delete_many()代替

find_and_modify():建议使用find_one_and_delete(),find_one_and_replace()代替

ensure_index():建议使用create_index()代替

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容