Driver)PHPからMongoDBに接続してみます。Webサーバーの構築はこちらの手順。php-fpmな環境を構築するMongoDBのインストールはこちらの手順で構築した環境を使用します。Driverを使用することにしました。Driver必要なモジュールをapt-getでインストールします。makepeclコマンドでドライバーをインストール。SASLはnoで良いと思います。php.inimongo.soが生成されました。設定ファイルを作成し、ライブラリがロードされるようにします。/etc/php5/fpm/conf.d/mongo.inimongo.iniに記載する内容は以下のとおり。moduleextension=mongo.sophp-fpmを使用していますので、一旦再起動。restartphpinfoを表示して、mongoの項目が表示されればライブラリのロードは成功しています。接続のサンプルプログラムは、こちらのドキュメントを参考に作成しました。'<br/>';}そっけないですが、登録と検索が行えることが確認できました。検索条件の指定findで検索条件を指定してみます。3件ほどデータを登録しました。'<br/>';}number:2のデータだけ表示してみます。'<br/>';}いい感じです。ソートnuber:3からデータを降順で取得してみます。'<br/>';}引数に「1」を指定すると昇順、「-1」を指定すると降順になります。findでandやor、$gt,$ltを使用するMongoDBで検索するとき、andやorで条件が指定できるか調べてみました。2.7.1を使用したプログラムです。テストデータこんなテストデータを用意します。4登録に使用したプログラムは以下のとおり。4})and条件指定tagsに「dog」と「cat」を持つドキュメントを検索します。http://docs.mongodb.org/manual/reference/operator/query/and/findに「$and」を指定すれば良いようです。print(doc)想定通りの結果が得られました。u'mongo'}or条件指定tagsに「dog」または「cat」を持つドキュメントを検索します。http://docs.mongodb.org/manual/reference/operator/query/or/findに「$or」を指定すれば良いようです。print(doc)3つのドキュメントが抽出出来ました。u'mongo'}指定値より大きい値numberが2より大きい値を検索してみます。条件に「$gt」を指定すればOK。print(doc)numberが「3」と「4」のドキュメントが取得出来ました。u'riak'}指定値を含み大きい値numberが2以上のドキュメントを検索してみます。条件に「$gte」を指定してやります。print(doc)numberが2,3,4のドキュメントが取得出来ました。u'riak'}指定値より小さい値numberが3未満のドキュメントを検索します。条件に「$lt」を指定。print(doc)numberが「1」と「2」のドキュメントが取得出来ました。u'mongo'}指定値以下の値numberが3以下のドキュメントを検索します。条件に「$lte」を指定。print(doc)numberが1,2,3のドキュメントが取得出来ました。u'mongo'}範囲指定numberが2以上、3以下のドキュメントを検索します。条件を並べて記載してやればOK。print(doc)狙い通り、numberが「2」と「3」のドキュメントが取得出来ました。u'mongo'}辞書型の値を検索ドキュメントのvaluesには、辞書型のデータを保存しています。「key1」のvalueが「v2」の値を検索してみます。フィールドの指定を「values.key1」としてやれば検索できます。print(doc)ちゃんと1件取得出来ました。u'mongo'}ソートせっかくなので、ソートも見てみます。print(doc)number順にソートされます。u'riak'}逆順にするには、pymongo.DESCENDINGを指定します。print(doc)逆順になりました。u'symfo'}複合ソートなども実行可能です。詳細はこちらのドキュメントのsortの項目参照。2.7.1でMap,ReduceのサンプルMongoDBのようなドキュメントのデータベースといえば、Map,Reduceの機能がウリのはず。PyMongoでPythonからMap,Reduceの機能を使用してみます。サンプルデータこちらのドキュメントを参考にしました。Examplesこんなデータを事前に登録しておきます。[]登録に使用したプログラムはこんな感じ。[]})タグに使用されている名称を集計タグに使用されている文字と、そのタグが使用されている件数を集計してみます。print(doc)myresultsというコレクションが作成され、そこに集計結果が登録されます。実行すると、各タグの名称と使用回数が表示されました。1.0}集計する条件を指定userがmongoのタグの使用状況を集計してみます。map_reduceを実行するとき、queryを指定すればOK。print(doc)user:mongoのデータのみ集計できました。1.0}Groupuser毎に、各々何件ドキュメントが存在するかgroupを使用して数えてみます。2.7.1で「_id」を自分で指定して、登録や検索を行うMongoDBにPythonからPyMongoを使用して操作してみています。使う機能のまとめデータベースの仕様上、「_id」というフィールドが自動的に付与され、ユニークなObjectIdが設定されます。これを自分で指定できないものか。日付をyyyy-MM-dd形式にして_idとして使用したいとか。ObjectIdに日付を指定まず試してみたのは、ObjectIdを自分で作成して見る方法。※これはうまく行きません。ObjectId」というエラーが発生します。ObjectIdどうすれば良いのか悩んだのですが、オチは簡単。_idに文字列をそのまま指定すればOKです。print(doc)実行すると、ちゃんと登録できたことがわかりました。u'test'}注意点は、もう一度このプログラムを実行するとキー重複のエラーになります。}事前にremoveしておくか、saveを使用するようにします。print(doc)saveは_idに存在しない値を指定した場合は、insertと同じ動きになるようです。使う機能のまとめMongoDBへPythonからPyMongoを使用して接続。PyMongoのチュートリアルを試してみました。2.7.1のインストールと使い方(チュートリアル)チュートリアルに登場していない、よく使うことになりそうな機能を試してみます。MongoClientMongoDBに接続するためのオブジェクトです。ドキュメントはこちら。MongoDBdatabase_names()で、データベースの一覧表示。drop_database(name_or_database)で、データベースの削除が行えます。「mongo_test」というデータベースを作成して、名前を表示。その後、データベースを削除するサンプルはこんな感じになりました。print(database_name)実行後、「mongo_test」データベースが削除されたことが確認できます。sample.pymongo_testtest_databaselocal----------test_databaselocalデータベース関連データベースにあるコレクションの情報を取得してみます。ドキュメントはこちら。operations「mongo_test」データベースに「col_1」と「col_2」という2つのコレクションを作成。コレクション名の一覧を表示したあと、「col_1」を削除してみます。print(collection_name)system.indexesコレクションは自動的に作成されるコレクションです。想定通り、col_1が削除出来ました。sample.pysystem.indexescol_2col_1----------system.indexescol_2コレクション内のドキュメント操作コレクションに登録されているドキュメントを操作してみます。operationsデータの登録は「insert」を使用します。サンプルはこんな感じ。print(doc)自動的に「_id」フィールドが作成されます。data'}このデータを更新したい場合は、「save」を使用します。サンプルはこんな感じ。findでデータを取得。print(doc)ちゃんと値が変更されました。changed'}データを削除するには「remove」を使用します。)削除後、データが取得できないことが確認できました。changed'}----------None条件を指定してデータを更新したい場合は、「update」を使用します。サンプルはこんな感じ。print(doc)狙った値だけ変更できました。次のページプロフィールAuthor:symfoblog形式だと探しにくいので、まとめサイト作成中です。