使用Python来使用NoSQL数据库MongoDB – 总结pymongo的基本用法

pymongo是用于在Python中使用MongoDB的库。我试图总结基本的用法,请指正任何错误。我会随时更新。当前版本为3.5.1。

懂一定程度英文的人可以直接阅读以下网页:
http://api.mongodb.com/python/

本文概要

下面是基本的RDB select和insert的方法介绍。
关于MongoDB的基本数据结构,请参考以下链接:
https://qiita.com/yuji0602/items/c55e2cb75376fd565b4e

使用pip进行安装和升级

安装

python -m pip install pymongo

如果要指定版本,请参考以下。

python -m pip install pymongo==3.1.1

更新

python -m pip install --upgrade pymongo

备好

为了执行对MongoDB的命令(查询),请导入“MongoClient”。
如果要使用自己本地的MongoDB,请按如下方式准备MongoClient。
第一个参数是地址,第二个参数是端口号。MongoDB的默认端口号是27017。

from pymongo import MongoClient
client = MongoClient('localhost', 27017)

你也可以使用URL进行指定。

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

调用数据库

使用MongoClient来调用数据库。
以下是调用MongoDB中名为”test_database”的数据库。

db = client.test_database

如果MongoDB中不存在名为”test_database”的数据库,则会自动创建。

如果想在循环等情况下更改名称并进行引用,这样做非常方便。

db = client['test-database']

呼叫集合

使用MongoClient调用数据库中的集合。
集合相当于关系型数据库中的表。
如果不存在集合,将自动创建。

collection = db.test_collection

可以像数据库一样使用以下格式。

collection = db['test-collection']

关于文件的内容

MongoDB的数据以以下的JSON格式存储。
有关JSON的更多信息,请参考以下链接:
https://thinkit.co.jp/article/70/1

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

在关系型数据库中,行被称为文档,列被称为字段。
在上述内容中,”post”本身就是【文档】。
而”post”中的”author”和”text”等都是【字段】。

将文件插入到收藏夹中。

将事先调用的集合”collection”中准备好的”post”插入。
返回值是在pymongo中定义的”InsertOneResult”实例。

#idは自動で一意に振り分けられる
result1 = collection.insert_one(post)

如果您想存储多个文档,可以使用「insert_many()」方法

new_posts = [{"author": "Mike",
              "text": "Another post!",
              "tags": ["bulk", "insert"],
              "date": datetime.datetime(2009, 11, 12, 11, 14)},
             {"author": "Eliot",
              "title": "MongoDB is fun",
              "text": "and pretty easy too!",
              "date": datetime.datetime(2009, 11, 10, 10, 45)}]
result2 = collection.insert_many(new_posts)

选取集合内的文档。

使用find方法进行引用。

如果只想引用一个文件的话

使用 find_one() 方法。

print(collection.find_one())

在以下输出中,请在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!'}

如果想引用字段”author”为”Mike”的文档,请按照以下方式操作。

collection.find_one({"author": "Mike"})

如果您想引用多个文档,

使用find()方法。
返回一个在pymongo中定义的Cursor实例。

for post in collection.find():
    print(post)

下面,输出

{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!'}
{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'bulk', u'insert'],
 u'text': u'Another post!'}
{u'_id': ObjectId('...'),
 u'author': u'Eliot',
 u'date': datetime.datetime(...),
 u'text': u'and pretty easy too!',
 u'title': u'MongoDB is fun'}
bannerAds