A Peak Never Ending !

Mongodbインストールしてみた

mongodb使ってみようかな〜と思ってたけど触ったことなかったのでどんなこと出来るかちょっと試してみた。 昨今みんながワイワイ言ってるだけあって便利そうだな〜といった印象。 使えそうなので次はfluentd -> mongo -> railsとかwebsoketってやってサーバのリソースモニタを試してみるつもり。 触ったことない人は下のリンクを順番にたどると感じがつかめると思う。

Quick Start Unix

インストール(ubuntu)

1
sudo aptitude install mongodb

デフォルトの設定はこうなってた

/etc/mongodb.conf
1
2
3
4
5
6
7
8
9
10
# 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

mongoコマンドを実行するとmongodbを操作するシェルが立ち上がる。 データ保存して表示するテストをしてみる。mysqlと同じように複数のdatabaseを作成することができて、 その中にtableに似たcollectionっていうのが作れるらしい。デフォルトだとtestデータベースに 接続する様子。下の例だとexampleのところがcollectionになるみたい。

1
2
3
4
5
> db.example.save( {a:1} )
> db.example.save( {b:2} )
> db.example.find()
{ "_id" : ObjectId("4f50783e7dcfb0a8e8fc8a32"), "a" : 1 }
{ "_id" : ObjectId("4f507dd67dcfb0a8e8fc8a33"), "b" : 2 }

とりあずhelpすると良いっぽいので叩く。

1
2
3
4
5
6
7
8
9
10
11
12
> 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

めぼしいものをちょっと叩いてみる。show dbsしてみる。

1
2
3
4
> show dbs
admin
local
test

show collectionsしてみる。スキーマレスなだけあってmysqlみたいに事前にcollectionを つくらなくても値を入れるとcollectionが出来るのかexampleがある。

1
2
3
> show collections
example
system.indexes

show usersしても何もでない。db.example.find({a:1})してみる

1
2
> db.example.find({a:1})
{ "_id" : ObjectId("4f50783e7dcfb0a8e8fc8a32"), "a" : 1 }

変数使える。

1
2
3
4
5
6
7
> j = { name : "mongo" };
{ "name" : "mongo" }
> db.example.save(j)
> db.example.find()
{ "_id" : ObjectId("4f50783e7dcfb0a8e8fc8a32"), "a" : 1 }
{ "_id" : ObjectId("4f507dd67dcfb0a8e8fc8a33"), "b" : 2 }
{ "_id" : ObjectId("4f50817d7dcfb0a8e8fc8a34"), "name" : "mongo" }

forまで使えちゃう

1
2
3
4
5
6
7
8
> for (var i = 1; i <= 3; i++) db.example.save({x : 1, y : i});
> db.example.find()
{ "_id" : ObjectId("4f50783e7dcfb0a8e8fc8a32"), "a" : 1 }
{ "_id" : ObjectId("4f507dd67dcfb0a8e8fc8a33"), "b" : 2 }
{ "_id" : ObjectId("4f50817d7dcfb0a8e8fc8a34"), "name" : "mongo" }
{ "_id" : ObjectId("4f50833d7dcfb0a8e8fc8a38"), "x" : 1, "y" : 1 }
{ "_id" : ObjectId("4f50833d7dcfb0a8e8fc8a39"), "x" : 1, "y" : 2 }
{ "_id" : ObjectId("4f50833d7dcfb0a8e8fc8a3a"), "x" : 1, "y" : 3 }

特定のキーが特定の値のものだけ取り出す

1
2
3
4
> db.example.find( {'x':1} )
{ "_id" : ObjectId("4f50833d7dcfb0a8e8fc8a38"), "x" : 1, "y" : 1 }
{ "_id" : ObjectId("4f50833d7dcfb0a8e8fc8a39"), "x" : 1, "y" : 2 }
{ "_id" : ObjectId("4f50833d7dcfb0a8e8fc8a3a"), "x" : 1, "y" : 3 }

メソッドチェーンしてcountとかも出来るみたい

1
2
> db.example.find({'x':1}).count()
3

countの他に使えるメソッドはhelpで確認できる模様

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
> db.example.help
function () {
    print("DBCollection help");
    print("\tdb.foo.count()");
    print("\tdb.foo.dataSize()");
    print("\tdb.foo.distinct( key ) - eg. db.foo.distinct( 'x' )");
    print("\tdb.foo.drop() drop the collection");
    print("\tdb.foo.dropIndex(name)");
    print("\tdb.foo.dropIndexes()");
    print("\tdb.foo.ensureIndex(keypattern,options) - options should be an object with these possible fields: name, unique, dropDups");
    print("\tdb.foo.find( [query] , [fields]) - first parameter is an optional query filter. second parameter is optional set of fields to return.");
    print("\t                                   e.g. db.foo.find( { x : 77 } , { name : 1 , x : 1 } )");
    print("\tdb.foo.find(...).count()");
    print("\tdb.foo.find(...).limit(n)");
    print("\tdb.foo.find(...).skip(n)");
    print("\tdb.foo.find(...).sort(...)");
    print("\tdb.foo.findOne([query])");
    print("\tdb.foo.getDB() get DB object associated with collection");
    print("\tdb.foo.getIndexes()");
    print("\tdb.foo.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } )");
    print("\tdb.foo.mapReduce( mapFunction , reduceFunction , <optional params> )");
    print("\tdb.foo.remove(query)");
    print("\tdb.foo.renameCollection( newName ) renames the collection");
    print("\tdb.foo.save(obj)");
    print("\tdb.foo.stats()");
    print("\tdb.foo.storageSize() - includes free space allocated to this collection");
    print("\tdb.foo.totalIndexSize() - size in bytes of all the indexes");
    print("\tdb.foo.totalSize() - storage allocated for all data and indexes");
    print("\tdb.foo.update(query, object[, upsert_bool])");
    print("\tdb.foo.validate() - SLOW");
    print("\tdb.foo.getShardVersion() - only for use with sharding");