mongodbつかってみる
なぜ?
7つのデータベース、7つの世界をよんだら、mongodbつかってみたくなったから。 http://www.amazon.co.jp/dp/4274069087
技術ありきで、作りたいものがないという。。
インストール
ミーハーなので最新版を。
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
$ curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.0.tgz
$ sudo vim /etc/apt/sources.list.d/10gen.list
下記を追加
"deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen"
パッケージをアップデート
$ sudo apt-get update
2.4.0のインストール
$ sudo apt-get install mongodb-10gen=2.4.0
設定ファイルの場所
$ cat /etc/mongodb.conf
データの保存場所
$ ls /var/lib/mongodb
サービスの起動
$ sudo service mongodb start
使ってみる
$ mongo
おおーうごいた。
基本操作
基本操作を覚える http://docs.mongodb.org/manual/tutorial/getting-started/
データベースにつなげる
起動
$ mongo
現在のデータベースを表示
> db
test
データベースリストの表示
> show dbs
新しいデータベースに切り替える
> use mydb
collectionを作る。documentを挿入する。
jとkというドキュメントを作る
> j = { name: "mongo" }
> k = { x : 3 }
thingsというcollectionにj,kのドキュメントを追加する
> db.things.insert(j);
> db.things.insert(k);
collectionの一覧を表示する
> show collections
collection内のドキュメントを表示する
> db.things.find()
{ "_id" : ObjectId("514d9d5d41e70994840e6c01"), "name" : "mongo" }
{ "_id" : ObjectId("514d9d6541e70994840e6c02"), "x" : 3 }
全部のドキュメントには_idが自動で挿入される
forループを使って、ドキュメントを挿入する
> for (var i=1; i<10; i++) db.things.insert({x: 1, y: i})
> db.things.find()
{ "_id" : ObjectId("514d9d5d41e70994840e6c01"), "name" : "mongo" }
{ "_id" : ObjectId("514d9d6541e70994840e6c02"), "x" : 3 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c03"), "x" : 1, "y" : 1 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c04"), "x" : 1, "y" : 2 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c05"), "x" : 1, "y" : 3 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c06"), "x" : 1, "y" : 4 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c07"), "x" : 1, "y" : 5 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c08"), "x" : 1, "y" : 6 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c09"), "x" : 1, "y" : 7 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c0a"), "x" : 1, "y" : 8 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c0b"), "x" : 1, "y" : 9 }
cursorを使って移動する
> while ( c.hasNext() ) printjson( c.next() )
{ "_id" : ObjectId("514d9d5d41e70994840e6c01"), "name" : "mongo" }
{ "_id" : ObjectId("514d9d6541e70994840e6c02"), "x" : 3 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c03"), "x" : 1, "y" : 1 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c04"), "x" : 1, "y" : 2 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c05"), "x" : 1, "y" : 3 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c06"), "x" : 1, "y" : 4 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c07"), "x" : 1, "y" : 5 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c08"), "x" : 1, "y" : 6 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c09"), "x" : 1, "y" : 7 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c0a"), "x" : 1, "y" : 8 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c0b"), "x" : 1, "y" : 9 }
特定要素へのアクセス
> var c = db.things.find()
> printjson(c[4])
{ "_id" : ObjectId("514d9f6c41e70994840e6c05"), "x" : 1, "y" : 3 }
特定ドキュメントの検索
> db.things.find( { x : 4 } )
> { "_id" : ObjectId("514d9f6c41e70994840e6c03"), "x" : 1, "y" : 1 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c04"), "x" : 1, "y" : 2 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c05"), "x" : 1, "y" : 3 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c06"), "x" : 1, "y" : 4 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c07"), "x" : 1, "y" : 5 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c08"), "x" : 1, "y" : 6 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c09"), "x" : 1, "y" : 7 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c0a"), "x" : 1, "y" : 8 }
> { "_id" : ObjectId("514d9f6c41e70994840e6c0b"), "x" : 1, "y" : 9 }
findの第二引数はprojectionする引数。 下の場合、y という値を1=trueで表示しろという意味。 {y:0}とすれば、yは表示されない。
> db.things.find({ x: 1 }, { y: 1 } )
{ "_id" : ObjectId("514d9f6c41e70994840e6c03"), "y" : 1 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c04"), "y" : 2 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c05"), "y" : 3 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c06"), "y" : 4 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c07"), "y" : 5 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c08"), "y" : 6 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c09"), "y" : 7 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c0a"), "y" : 8 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c0b"), "y" : 9 }
1行だけ表示
> db.things.findOne()
limitをもうける
> db.things.find().limit(3)
{ "_id" : ObjectId("514d9d5d41e70994840e6c01"), "name" : "mongo" }
{ "_id" : ObjectId("514d9d6541e70994840e6c02"), "x" : 3 }
{ "_id" : ObjectId("514d9f6c41e70994840e6c03"), "x" : 1, "y" : 1 }