基于PyMongo3.4.0文档的学习记录(1)——Tutorial

教程是pymongo和Mongo的一个简单介绍。看完后应该对Pymongo对Mongo的基本操作认识了。

先决条件

开始之前,安装PyMongo和Mongo。确保在Python交互界面执行import不报错:

>>import pymongo

使用MongoClient进行连接

使用PyMongo的第一步是创建一个 MongoClient运行的mongod 实例。这样做很容易:

>>> from  pymongo  import  MongoClient 
>>> client  =  MongoClient ()

上述代码将连接默认主机和端口。我们还可以明确指定主机和端口,如下所示:

>>> client  =  MongoClient ('localhost'27017

或使用MongoDB URI格式:

>>> client  =  MongoClient ('mongodb:// localhost:27017 /'

获取数据库

MongoDB的一个实例可以支持多个独立的数据库。当使用PyMongo时,您可以使用实例上的属性样式访问访问MongoClient数据库:

>>> db  =  client.test_database

如果您的数据库名称使用属性样式访问将无法正常工作(如test-database),则可以使用字典样式访问:

>>> db  =  client [ 'test-database' ]

获取集合

一个集合是一组存储在MongoDB中的文档,并且可以被认为是大致在关系数据库中的表的当量。在PyMongo中获取集合的工作方式与获取数据库相同:

>>> collection  =  db.test_collection

或(使用字典样式访问):

>>> collection  =  db [ 'test-collection' ]

MongoDB中关于集合(和数据库)的一个重要注意事项是,它们是懒惰创建的 - 上述任何命令都没有在MongoDB服务器上实际执行任何操作。当将第一个文档插入时,将创建集合和数据库。

这里写图片描述

文件

MongoDB中的数据使用JSON样式文档进行表示(并存储)。在PyMongo中,我们使用字典来表示文档。例如,以下字典可能用于表示博客文章:

>>> import datetime
>>> post = {"author": "Mike",
...         "text": "My first blog post!",
...         "tags": ["mongodb", "python", "pymongo"],
...         "date": datetime.datetime.utcnow()}

请注意,文档可以包含本机Python类型(例如 datetime.datetime实例),将自动转换为相应的BSON类型和从相应的BSON类型转换

插入文件

要将文档插入到集合中,我们可以使用以下insert_one()方法:

>>> posts = db.posts
>>> post_id = posts.insert_one(post).inserted_id
>>> post_id
ObjectId('...')

当文档插入特殊键时"_id",如果文档尚未包含"_id"键,则会自动添加。该"_id"集合的值必须是唯一的。insert_one()返回一个实例InsertOneResult。有关更多信息"_id",请参阅有关_id的文档。

插入第一个文档后,实际上已经在服务器上创建了帖子集合。我们可以通过列出我们的数据库中的所有集合来验证:

>>> db.collection_names(include_system_collections=False)
[u'posts']

用find_one()获取单个文档

MongoDB中可以执行的最基本的查询类型是 find_one()。此方法返回与查询匹配的单个文档(或None如果没有匹配项)。当您知道只有一个匹配的文档,或只对第一个匹配项感兴趣时,它是有用的。这里我们 find_one()用来从帖子集中获取第一个文档:

>>> import pprint
>>> pprint.pprint(posts.find_one())
{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'mongodb', u'python', u'pymongo'],
 u'text': u'My first blog post!'}

注意 返回的文档包含一个"_id"自动添加的插入。
find_one()还支持查询结果文档必须匹配的特定元素。为了将我们的结果限制在作者“Mike”的文档中:

>>> pprint.pprint(posts.find_one({"author": "Mike"}))
{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'mongodb', u'python', u'pymongo'],
 u'text': u'My first blog post!'}

如果我们尝试使用不同的作者,例如“Eliot”,我们将不会得到结果:

>>> posts.find_one({"author": "Eliot"})
>>>

通过ObjectId查询

我们也可以找到一个post通过_id,在我们的例子中是一个ObjectId:

>>> post_id
ObjectId(...)
>>> pprint.pprint(posts.find_one({"_id": post_id}))
{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'mongodb', u'python', u'pymongo'],
 u'text': u'My first blog post!'}

请注意,ObjectId与其字符串表示形式不同:

>>> post_id_as_str = str(post_id)
>>> posts.find_one({"_id": post_id_as_str}) # No result
>>>

Web应用程序中的常见任务是从请求URL获取ObjectId并找到匹配的文档。在这种情况下,必须将字符串转换为ObjectId在传递给 find_one()方法之前:

from bson.objectid import ObjectId

# The web framework gets post_id from the URL and passes it as a string
def get(post_id):
    # Convert from string to ObjectId:
    document = client.db.collection.find_one({'_id': ObjectId(post_id)})

参考资料:

PyMongo 3.4.0 documentation 官方文档

菜鸟教程——MongoDB概念解析

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值