今回は 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で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)}