首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 操作 MongoDB 数据库(下)

Python 操作 MongoDB 数据库(下)

作者头像
编程文青李狗蛋
发布2019-11-07 16:11:42
4640
发布2019-11-07 16:11:42
举报
本文字数:3781 字 阅读本文大概需要:10 分钟

写在之前

Python 操作 MongoDB 数据库(上) 这篇文章中,我们学洗了 MongoDB 数据库的安装运行和使用,以及用 Python 连接 MongoDB。我们建立的 books 引用的是一个 MongoDB 的集合对象,既然是对象,那么就有一些方法供我们使用,今天我们就来学习一下。

编辑

>>> type(books)
<class 'pymongo.collection.Collection'>
>>> dir(books)

还是用我们的老朋友 dir() ,你在自己的交互模式下运行的结果会发现有很多的方法,这么多方法在这里我不会一一介绍,只是按照「增删改查」的常用功能介绍几种,大家可以用 help() 去查看每一种方法的使用说明。

>>> books.find_one()
{u'like': u'python', u'_id': ObjectId('5bab28b6a1888724cb5ba515'), u'author': u'
rocky', u'title': u'zero study python'}

这里提醒大家注意的是,MongoDB 的 shell 中的命令与 pymongo 中的方法有时候会稍有差别,这个务必小心。

目前在集合 books 中只有一个文档,如果还想再增加,就需要进行「增删改查」的常规操作。

1.增加

>>> b2 = {"title":"physics","author":"leey","like":"English"}
>>> books.insert(b2)
ObjectId('5badb7c8b2e7d42bccfb6b30')

上面成功的向集合中增加一个文档。

>>> books.find().count()
2

这是查看当前集合有多少个文档的方式,返回值为 2,则说明集合中有两个文档,但还是要看看内容的:

>>> books.find_one()
{u'like': u'python', u'_id': ObjectId('5bab28b6a1888724cb5ba515'), u'author': u'
rocky', u'title': u'zero study python'}

这个命令就不行,因为它只返回第一条,必须要:

>>> for i in books.find():
...     print(i)
...
{u'like': u'python', u'_id': ObjectId('5bab28b6a1888724cb5ba515'), u'author': u'
rocky', u'title': u'zero study python'}
{u'title': u'physics', u'_id': ObjectId('5badb7c8b2e7d42bccfb6b30'), u'like': u'
English', u'author': u'leey'}

在 books 引用的印象中有 find() 方法,它返回的是一个可迭代对象,包含着集合中所有的文档。

由于文档是「键/值对」,不一定每一个文档的结构都要一样。比如可以在集合中插入像下面这样的文档:

>>> books.insert({"name":"qwer"})
ObjectId('5badb9f1b2e7d42bccfb6b31')
>>> for i in books.find():
...     print(i)
...
{u'like': u'python', u'_id': ObjectId('5bab28b6a1888724cb5ba515'), u'author': u'
rocky', u'title': u'zero study python'}
{u'title': u'physics', u'_id': ObjectId('5badb7c8b2e7d42bccfb6b30'), u'like': u'
English', u'author': u'leey'}
{u'_id': ObjectId('5badb9f1b2e7d42bccfb6b31'), u'name': u'qwer'}

如果有多个文档,想同时插入到集合中,可以像下面这样做:

>>> n1 = {"title":"enter","name":"bash"}
>>> n2 = {"title":"code","name":"john"}
>>> n3 = {"title":"warner","name":"lisp"}
>>> n = [n1,n2,n3]
>>> n
[{'name': 'bash', 'title': 'enter'}, {'name': 'john', 'title': 'code'}, {'name':
 'lisp', 'title': 'warner'}]
>>> books.insert(n)
[ObjectId('5badc702b2e7d42bccfb6b32'), ObjectId('5badc702b2e7d42bccfb6b33'), Obj
ectId('5badc702b2e7d42bccfb6b34')]

这样就完成了所谓的批量插入,查看一下文档个数:

>>> books.find().count()
6

这里需要提醒一下的是,批量插入的文档大小是有限制的,具体是多少没有碰到过,一般情况下或许达不到上限,如果遇到极端情况,那么就要多多注意啦。

2.查询

如果要查询的话,除了通过循环以外,能不能按照某个条件查询呢?比如查找 name = bash 的文档:

>>> books.find_one({"name":"bash"})
{u'_id': ObjectId('5badc702b2e7d42bccfb6b32'), u'name': u'bash', u'title': u'ent
er'}

对于查询结果,还可以进行排序:

>>> for i in books.find().sort("title",pymongo.ASCENDING):
...     print(i)
...
{u'_id': ObjectId('5badb9f1b2e7d42bccfb6b31'), u'name': u'qwer'}
{u'_id': ObjectId('5badc702b2e7d42bccfb6b33'), u'name': u'john', u'title': u'cod
e'}
{u'_id': ObjectId('5badc702b2e7d42bccfb6b32'), u'name': u'bash', u'title': u'ent
er'}
{u'title': u'physics', u'_id': ObjectId('5badb7c8b2e7d42bccfb6b30'), u'like': u'
English', u'author': u'leey'}
{u'_id': ObjectId('5badc702b2e7d42bccfb6b34'), u'name': u'lisp', u'title': u'war
ner'}
{u'like': u'python', u'_id': ObjectId('5bab28b6a1888724cb5ba515'), u'author': u'
rocky', u'title': u'zero study python'}

这里按照 title 的升序排列的,注意 sort() 的第二个参数,意思是升序排列,如果按照降序的话,就需要将参数修改为 pymongo.DESCEDING。

如果你看到这里,请务必注意 MongoDB 中的每个文档,本质上都是 键/值 对的类字典结构,这种结构一经 Python 读出来,就可以用字典中的各种方法来操作。

你是否还能记起我们之前讲过的 Json,这个也是类字典格式。但是用 Python 从 MongoDB 中读到的类字典数据,却无法直接用 json.dumps() 方法操作。

3.更新

对于已有的数据库来说,更新数据是常用的操作。比如更新 name 为 lisp 的文档:

>>> books.update({"name":"lisp"},{"$set":{"title":"new physics","author":"lisp"}
})
{'updatedExisting': True, u'nModified': 1, u'ok': 1.0, u'n': 1}

在更新的时候,用了一个 $set 修改器,它可以用来指定键值,如果键不存在则创建。关于更多的修改器,如下所示(截图来源于网上):

4.删除

删除可以用 remove() 方法:

>>> books.remove({"name":"bash"})
{u'ok': 1.0, u'n': 1}
>>> books.find_one({"name":"bash"})
>>>

这个是将整个文档全部删除。当然了,也可以根据 MongoDB 的语法规则写个条件,按照条件删除。

5.索引

索引的目的是为了让查询的速度更快,但是在实际应用中,是否建立索引要视情况而定,因为建立索引是有代价的。

>>> books.create_index([("title",pymongo.DESCENDING),])
u'title_-1'

写在之后

这两篇 Python 操作 MongoDB 数据库的文章仅仅是对 pymongo 模块做了一个非常简单的介绍,在实际的使用过程中,上面的知识其实是很有限的,所以还是需要大家根据具体应用场景再结合 MongoDB 的相关知识去尝试新的语句。

如果你觉得本篇文章对你有帮助的话,欢迎点赞、转发、关注支持一下。

The end。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档