MongoDB 操作&プログラミング事始め

はじめに

 MongoDB のシェルを使った基本的な操作を紹介したあと、Python プログラムを使って目的のデータを検索したりデータを追加したりするサンプルを紹介します。

Mongo シェルによる基本操作

Mongo シェルの起動

 「localhost:27017」は省略できます。別のホスト、ポートで稼働する MongoDB サーバーに接続するには、この引数を変更してください。

$ mongo localhost:27017

データベースの一覧表示

> show databases

データベースの選択

> use mydb
switched to db mydb

データベース内のコレクションの一覧表示

> show collections
system.indexes

コレクションへのデータ追加

> db.mycollection.save({
...   'name': 'sales_log_1',
...   'items': {
...     'apple': 1,
...     'orange': 5
...   }
... })
WriteResult({ "nInserted" : 1 })

コレクションに含まれるデータ件数の表示

> db.mycollection.count()
1

コレクションのデータ1件を表示

> db.mycollection.findOne()
{
        "_id" : ObjectId("5604e5980567ec17891193dc"),
        "name" : "sales_log_1",
        "items" : {
                "apple" : 1,
                "orange" : 5
        }
}

コレクションからデータを検索

> db.mycollection.find({'items.orange': {'$gte': 5}})
{ "_id" : ObjectId("5604e5980567ec17891193dc"), "name" : "sales_log_1", "items" : { "apple" : 1, "orange" : 5 } }

> db.mycollection.find({'items.apple': {'$gte': 5}})
( no result )

コレクションの全データ削除

 コレクション自体は削除しません。

> db.mycollection.remove({})

コレクションの削除

 コレクション自体も削除します。

> db.mycollection.drop()
true

> db.mycollection.drop()
false (削除済みの場合はfalseになる)

データベースの削除

> use mydb
switched to db mydb
> db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }

> use mydb
switched to db mydb (この時点ではまだデータベースの実体がない)
> db.dropDatabase()
{ "ok" : 1 } (実体がなく、削除するものがない)

Python プログラムによる操作

 pymongo モジュールを使用して MongoDB サーバーに接続する場合のサンプルです。
 2件のデータを登録したあと、簡単にデータを確認して items 内のフルーツについてそれぞれの合計を計算しています。

$ python

>>> import pymongo
>>> mongoclient = pymongo.MongoClient()
>>> mongoclient.mydb.mycollection.save({
...   'name' : 'sales_log_1',
...   'items' : {
...     'apple' : 1,
...     'orange' : 5
...   }
... })
...
ObjectId('5604ea0b0116af699b1bb46e')
>>> mongoclient.mydb.mycollection.save({
...   'name' : 'sales_log_2',
...   'items' : {
...     'orange' : 3,
...     'peach' : 3
...   }
... })
...
ObjectId('5604ea270116af699b1bb46f')
>>> mongoclient.mydb.mycollection.count()
2
>>> cursor = mongoclient.mydb.mycollection.find()
>>> for data in cursor:
...   data
...
{'_id': ObjectId('5604ea0b0116af699b1bb46e'), 'name': 'sales_log_1', 'items': {'orange': 5, 'apple': 1}}
{'_id': ObjectId('5604ea270116af699b1bb46f'), 'name': 'sales_log_2', 'items': {'orange': 3, 'peach': 3}}
>>> items = {}
>>> cursor = mongoclient.mydb.mycollection.find()
>>> for data in cursor:
...   for a_item_name in data['items']:
...     if (a_item_name in items) is False:
...       items[a_item_name] = 0
...     items[a_item_name] += data['items'][a_item_name]
...
>>> items
{'orange': 8, 'apple': 1, 'peach': 3}

コメントを残す

メールアドレスが公開されることはありません。