アイソモカ

知の遊牧民の開発記録

開発記録 200212 Wed (100本ノック #064 前半, MongoDB)

今回は MongoDB を準備して、Python から登録・検索・削除をしてみました。 あとで気づいたんですが、 #065 以降は Python ではなくMongoDB のインタラクティブシェルを使うように書いてありますね。Python でも良いかな……。

 

言語処理100本ノック #064

64. MongoDBの構築 アーティスト情報(artist.json.gz)をデータベースに登録せよ.さらに,次のフィールドでインデックスを作成せよ: name, aliases.name, tags.value, rating.value

 

準備: MongoDB

MongoDB をインストール

参考 👉 MongoDB Community EditionをmacOS Sierra 10.12にインストールする - Qiita

$ brew tap mongodb/brew
$ brew install mongodb-community@4.0
$ brew services start mongodb-community@4.0

path を通す

$ brew info mongodb-community@4.0
$ echo 'export PATH="/usr/local/opt/mongodb-community@4.0/bin:$PATH"' >> ~/.bash_profile

起動してデータベースの中身を表示してみる

$ mongo
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> exit

Python 用ライブラリのインストール

$ pip install pymongo

 

準備: MongoDB を使ってみる

ターミナル

$ brew services start mongodb-community@4.0

$ mongo

> show dbs 
  # データベース一覧

> db.test.find()
  # testデータベースの中身を全部表示

 

Python

参考 👉 pythonでMongoDB入門しよう の後半

# study_mongo.py
from pymongo import MongoClient
from bson.objectid import ObjectId
from datetime import datetime

class TestMongo(object):
    def __init__(self):
        self.clint = MongoClient()
        self.db = self.clint['test']

    def all_clear(self):
        c = 0
        for t in self.db.test.find():
            self.db.test.delete_one({'_id': t['_id']})
            c += 1
        return c

    def add_one(self):
        post = {
            'title': 'ハリネズミ',
            'content': 'ハリネズミ可愛い〜',
            'created_at': datetime.now()
        }
        return self.db.test.insert_one(post)

    def get_one(self):
        return self.db.test.find_one()

    def get_from_old(self, old):
        return self.db.test.find_one({'_id': ObjectId(old)})

    def update(self):
        return self.db.test.update_one({'title': 'ハリネズミ'}, {'$set': {'content': 'ハリネズミめっちゃ可愛い〜'}})


def main():
    obj = TestMongo()
    obj.all_clear()
    obj.add_one()
    print('Added One: ', obj.get_one())
    obj.update()
    print('Updated One: ', obj.get_one())


if __name__ == '__main__':
    main()
    

 ↓ 出力

$ python study_mongo.py 
Added One:  {'_id': ObjectId('5e4402ffd9359a2a10fcf139'), 'title': 'ハリネズミ', 'content': 'ハリネズミ可愛い〜', 'created_at': datetime.datetime(2020, 2, 12, 22, 51, 59, 590000)}
Updated One:  {'_id': ObjectId('5e4402ffd9359a2a10fcf139'), 'title': 'ハリネズミ', 'content': 'ハリネズミめっちゃ可愛い〜', 'created_at': datetime.datetime(2020, 2, 12, 22, 51, 59, 590000)}