2018年08月15日

言語処理100本ノックでPython入門 #64(後編) - MongoDBの構築

  

言語処理100本ノック 2015の第7章・問題64です。

前回はMoongoDBをインストールしたので、今日は、実際の問題を解いてみます。

■ 問題

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



■ Pythonのコード
import json
import pymongo

def enumdata():
    with open('artist.json', 'r', encoding='utf8') as fin:
        for line in fin:
            jsd = json.loads(line)
            yield jsd

def register():
    client = pymongo.MongoClient('localhost', 27017)
    db = client['MusicBrainzDb']
    artists = db['artists']
    for data in enumdata():
        artists.insert(data)
    artists.create_index([('name', pymongo.ASCENDING)])
    artists.create_index([('aliases.name', pymongo.ASCENDING)])
    artists.create_index([('tags.value', pymongo.ASCENDING)])
    artists.create_index([('rating.value', pymongo.ASCENDING)])


def main():
    register()

if __name__ == '__main__':
    main()

■ 簡単に説明


artist.jsonからJSONデータを一つずつ取り出して、insertメソッドでDBに登録しています。
全てのデータが登録終了したら、create_indexでインデックスを作成しています。

create_indexを先にやるとどうなるのかな? これは試していません。 件数が多いので、終わるまで結構時間がかかります。

■ データが登録されたかを確認

では、データが登録されたのか確認します。

MongoDB Compass ComunityというGUIの管理ツールがあるので、それをインストールします。

インストールのページで、バージョンを選択する場所があるので、そこで、Comunity Editionを選びます。
最初これがわからず、Comunityではないパッケージをダウンロードしてしまいました。

インストールはすぐに終わります。

インストールが終わったら、MongoDB Compass Community を起動します。
接続の画面ではデフォルトのままでDBに接続します。

MusicBrainzDbができているのが確認できます。
左のペインでMusicBrainzDbを選択すると、登録されている内容が見られます。
indexesタブを選ぶと、インデクスが作成されていることがわかります。