Windows で MongoDB をサービスとしてインストールする場合 デフォルトでは RECT は無効になっています。
C:\> mongod --install ^
--logpath E:\MongoDB\log\log.txt ^
--dbpath E:\MongoDB\data
RECT を有効にするには、"--rect" オプションを指定します。
C:\> mongod --install ^ --logpath E:\MongoDB\log\log.txt ^ --dbpath E:\MongoDB\data ^ --rect
すでにインストール済みの場合は "--install" オプションを "--reinstall" に変えて実行します。
これで RECT が有効になります。
サービスの「実行ファイルへのパス」にオプションが追加されます。
WindowsXP 環境に MongoDB 2.2.1 を入れようとしたら エラーになったメモです。
mongodb-win32-i386-2.2.1.zip をダウンロードして
mongod.exe を実行したところ
『プロシージャ エントリ ポイント InterlockedCompareExchange64 がダイナミック リンク ライブラリ KERNEL32.dll から見つかりませんでした。』
という
エラーメッセージが出ました。
[参考サイト]
marunouchi-mongodb/20120926/syokenz at master ・ syokenz/marunouchi-mongodb ・ GitHub
上記サイトによると、2.2.0 で WindowsXP のサポートは終了したそうです。
MongoDB 2.0.7 を入れたら動きました。
node.js と mongoose をインストールしたので node.js から MongoDB の値を取得してみます。
次のサイトを参考に進めました。
[参考]
mongooseを使ってmongodbにアクセスしてみる - A Peak Never Ending !
まず MongoDB にデータを登録します。
$ mongo MongoDB shell version: 1.2.2 url: test connecting to: test type "exit" to exit type "help" for help > use memo switched to db memo > db.memos.save({title:'test title1', body:'test body1'}) > db.memos.save({title:'test title2', body:'test body2'}) > exit
データベースは memo、コレクションは memos にします。
node.js のスクリプト memo.js を作ります。
上記の参考サイトのスクリプトをそのまま貼り付けます。
$ vi memo.js
/* * Mongooseでデータを取り出して表示するテスト */ var mongoose = require('mongoose'); // スキーマ定義 var MemoSchema = new mongoose.Schema({ title: String, body: String }); // モデルとして登録 var Memo = mongoose.model('Memo', MemoSchema); // mongodbに接続 mongoose.connect('mongodb://localhost:27017/memo', // memoの部分はデータベース名 // コールバックでエラー時の処理が書けるみたい。 function(err) { if (err) { console.log(err); } else { console.log('connection success!'); } } ); // findしてコンソールに出力 Memo.find({}, function(err, docs) { if(!err) { console.log("num of item => " + docs.length) for (var i = 0; i < docs.length; i++ ) { console.log(docs[i]); } mongoose.disconnect() // mongodbへの接続を切断 process.exit() // node.js終了 } else { console.log("find error") } });
実行してみます。
$ node memo.js
connection success!
num of item => 2
{ _id: 4f73edfbb7c76c517dc7eb16,
title: 'test title1',
body: 'test body1' }
{ _id: 4f73edffb7c76c517dc7eb17,
title: 'test title2',
body: 'test body2' }
node.js から MongoDB の値が取得できました。
これで、できることの幅が広がりました。
作業メモです。
前回の node.js の続きです。
今回は mongoose を入れます。
mongoose は node.js から mongodb を ORM っぽくアクセスするためのライブラリです。
mongoose のインストールには npm を使います。 npm は、前回の node.js のインストールで入っています。
$ which npm
/usr/local/bin/npm
プロキシ認証が必要な環境だとちょっと大変です。
まず npm にプロキシの設定をします。
$ npm config set proxy http://USER:PASSWORD@SERVER:PORT
プロキシを使う環境だと DNS が引けなくても大丈夫だったりしますが npm では下のサイトに書いてあるように名前の解決ができくてエラーになってしまいました。
[参考]
Proxy環境下でnpmインストール :ダメ人間オンライン
DNS を設定するか /etc/hosts に接続先の registry.npmjs.org を追加したりして対応します。
mongoose のインストール。
$ npm install mongoose
・・・と思いきや、またもやエラーが出ます。
npm http GET https://registry.npmjs.org/mongoose npm ERR! Error: connect ECONNREFUSED npm ERR! at errnoException (net.js:670:11) npm ERR! at Object.afterConnect [as oncomplete] (net.js:661:19)
次のサイトに書いてあるように https だとうまくいきません。
[参考]
WindowsXP + プロキシ環境でnpmを使う - 四角革命前夜
ホームディレクトリに .npmrc ができているので編集します。
$ vi ~/.npmrc
プロキシの設定が書いてあるので 次の行を追加します。
registry = http://registry.npmjs.org/
もう 1 度インストール。
$ npm install mongoose
今度は成功しました。
今回は、実際にデータを登録して見ます。 MongoDB は、 事前にテーブルなどを作成しません。 (スキーマレスと呼ぶそうです)
データベースと言えば SQL なので 次のサイトが わかりやすくて参考になりました。
[参考]
SQL脳に優しいMongoDBクエリー入門 - あるプログラマーの後悔日誌
MongoDB の操作は JavaScript な感じです。
> db.books.insert({ name : "a" });
スキーマレスなので、 何の定義もなく いきなりこんな記述で、データを登録できてしまいます。
books の部分が『コレクション』で RDBMS だとテーブルのようなものだと思います。
そこに JSON 形式のデータを INSERT しました。
{ name : "a" }
"show collections" で コレクションの一覧を参照できます。
> show collections
books
system.indexes
さっき登録した books があります。
もう 1 件登録してみます。
> db.books.insert({ name : "b" });
コレクションの中身を見るには次のように コレクションに対して find() メソッドを使用します。
> db.books.find();
{ "_id" : ObjectId("4f5ff9e69d12fb10f7c2955f"), "name" : "a" }
{ "_id" : ObjectId("4f647e7b9d12fb10f7c29560"), "name" : "b" }
上のように暗黙的に "_id" が作成されて データが管理されます。
もう少し複雑なデータを登録してみます。
> db.books.insert({ name : "c", detail : { size : "b5", page : 120 }});
> db.books.find();
{ "_id" : ObjectId("4f5ff9e69d12fb10f7c2955f"), "name" : "a" }
{ "_id" : ObjectId("4f647e7b9d12fb10f7c29560"), "name" : "b" }
{ "_id" : ObjectId("4f6480479d12fb10f7c29561"), "name" : "c", "detail" : { "size" : "b5", "page" : 120 } }
このように MongoDB は 1 つの "_id" に対して 1 つの JSON 形式のデータ(ドキュメント)を格納する形式のようです。
Web のインターフェースを使って見てみます。
http://127.0.0.1:28017/test/books/
test の部分がデータベース名、bookes がコレクション名です。
{ "offset" : 0, "rows": [ { "_id" : { "$oid" : "4f5ff9e69d12fb10f7c2955f" }, "name" : "a" } , { "_id" : { "$oid" : "4f647e7b9d12fb10f7c29560" }, "name" : "b" } , { "_id" : { "$oid" : "4f6480479d12fb10f7c29561" }, "name" : "c", "detail" : { "size" : "b5", "page" : 120 } } ], "total_rows" : 3 , "query" : {} , "millis" : 0 }
こんなデータが返ってきました。
これなら Ajax や node.js などからも
簡単に連携できそうです。
今回も mongo クライアントの話です。
mongo クライアントを起動すると デフォルトでは、次のように test というデータベースに接続されます。
$ mongo MongoDB shell version: 1.2.2 url: test connecting to: test type "exit" to exit type "help" for help >
"show dbs" で データベースの一覧を表示します。
> show dbs
admin
local
test
"use [データベース名]" で データベースを変更します。
> use local
switched to db local
DB に接続するというよりは カレントの DB を変更する、という感じですね。
今回は mongo クライアントを使ってみます。
Ubuntu10.04 の場合、mongodb パッケージをインストールすると mongo クライアントも入ります。
起動します。
$ mongo MongoDB shell version: 1.2.2 url: test connecting to: test type "exit" to exit type "help" for help >
出力されている通り help 表示してみます。
> help
HELP
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
use <db name> set curent database to <db name>
db.help() help on DB methods
db.foo.help() help on collection methods
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
なんか色々と出ました。
exit で終了します。
> exit bye $
たぶん続きます。
ドキュメント指向とやらの MongoDB を使ってみます。
まずはインストール。
環境はいつもの Ubuntu10.04 です。
$ sudo apt-get install mongodb
パッケージがあるので apt-get します。
ただ、↓のような感じで結構色々必要なようでした。
4 upgraded, 140 newly installed, 0 to remove and 121 not upgraded. Need to get 66.1MB of archives. After this operation, 258MB of additional disk space will be used.
インストールが完了すると、すでに起動しています。
$ ps ax | grep mongo
28350 ? Ssl 0:00 /usr/lib/mongodb/mongod --config /etc/mongodb.conf
起動の引数になっていた設定ファイルは以下のようでした。
$ cat cat /etc/mongodb.conf
# This is an config file for MongoDB master daemon mongod # it is passed to mongod as --config parameter logpath = /var/log/mongodb/mongod.log dbpath = /var/lib/mongodb/ # use 'true' for options that don't take an argument logappend = true bind_ip = 127.0.0.1 #noauth = true
LISTEN ポートは 27017 と 28017 が追加されてました。
$ netstat -ant
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:28017 0.0.0.0:* LISTEN -
27017 が DB 接続用のポート(デフォルト)で、 それに +1000 した 28017 は管理用の Web ページのようです。
http://127.0.0.1:28017/
これにアクセスすると下の参考サイトような感じで 色々とデータベースの情報が見れるようです。
[参考]
HTTPインターフェース - Docs-Japanese - 10gen Confluence
また、データベースやクエリーを URL に設定してアクセスすると データを text/plain の JSON 形式で出力してくれるので Web サービスとしても簡単に利用できそうな気がします。