MongoDBのクライアントツールを使用してデータを操作する

DebianにMongoDBをインストールして、動作させました。
DebianにMongoDBをインストールする

クライアントツールのmongoを使用して、MongoDBの動作を調べてみます。


クライアントツールの起動



MongoDBをインストールしたフォルダのbinにmongoというクライアントツールがあります。
./mongoとしてやると、クライアントツールが起動します。

起動時のメッセージはこんな感じ。


# ./mongo
MongoDB shell version: 1.3.1-
url: test
connecting to: test
Sat Jan 2 20:44:58 connection accepted from 127.0.0.1:40424 #3
type "help" for help





データベースの一覧表示



show dbsを実行すると、データベースの一覧が取得できます。


> show dbs
admin
db
foo
local
test





データベースの作成



明示的にデータベースの作成を行う命令は無いようです。
試しに、存在しないデータベース「mysample」にuseで切り替えてみます。


> use mysample
switched to db mysample



特にエラーは発生せず、使用するデータベースの切り替えが行われます。
この時点で、データベースの一覧を表示しても、「mysample」は存在しません。


> show dbs
admin
db
foo
local
test



次のデータの保存を実行したとき、データベースが作成されます。



データの保存



db.[コレクション名].save([保存する値])
という形式で、データの保存を実行します。

上記のmysampleデータベースに対し、sampleというコレクション名で
データを保存してみます。


> db.sample.save( { a : 1 } )
Sat Jan 2 20:47:19 allocating new datafile /data/db/mysample.ns, filling with zeroes...
Sat Jan 2 20:47:19 done allocating datafile /data/db/mysample.ns, size: 16MB, took 0.127 secs
Sat Jan 2 20:47:19 allocating new datafile /data/db/mysample.0, filling with zeroes...
Sat Jan 2 20:47:20 done allocating datafile /data/db/mysample.0, size: 64MB, took 0.588 secs
Sat Jan 2 20:47:20 building new index on { _id: ObjId(000000000000000000000000) } for mysample.sample...
Sat Jan 2 20:47:20 Buildindex mysample.sample idxNo:0 { name: "_id_", ns: "mysample.sample", key: { _id: ObjId(000000000000000000000000) } }
Sat Jan 2 20:47:20 done for 0 records 0.01secs
Sat Jan 2 20:47:20 insert mysample.sample32728ms




この時点で、データベースファイルが作成される模様。
show dbsを実行すると、mysampleが表示されます。


> show dbs
admin
db
foo
local
mysample
test




二回目以降の保存実行時には、上記のメッセージは表示されません。


> db.sample.save({b:2})
>(何も表示されない)





データの検索



登録されているデータを全件取得するには、
db.[コレクション名].find()
としてやります。


> db.sample.find()
{ "_id" : ObjectId("4b3f32472ba7942e3424e7ab"), "a" : 1 }
{ "_id" : ObjectId("4b3f338a0fc4428944029caa"), "b" : 2 }




最初のひとつだけ取得するには、findOne()としてやります。


> db.sample.findOne()
{ "_id" : ObjectId("4b3f32472ba7942e3424e7ab"), "a" : 1 }




条件を指定して検索するのはこんな感じ。


> db.sample.find({b:2})
{ "_id" : ObjectId("4b3f338a0fc4428944029caa"), "b" : 2 }



find()の中に、条件を記載してやります。

データベース内部では、_idによってデータを管理しているため、
重複するデータを登録可能です。
この辺、CouchDBと同じ発想かと思います。

試しに、{b:2}というデータを複数登録してみます。


> db.sample.save({b:2})
> db.sample.save({b:2})
> db.sample.save({b:2})
> db.sample.find()
{ "_id" : ObjectId("4b3f32472ba7942e3424e7ab"), "a" : 1 }
{ "_id" : ObjectId("4b3f338a0fc4428944029caa"), "b" : 2 }
{ "_id" : ObjectId("4b3f35000fc4428944029cab"), "b" : 2 }
{ "_id" : ObjectId("4b3f35000fc4428944029cac"), "b" : 2 }
{ "_id" : ObjectId("4b3f35010fc4428944029cad"), "b" : 2 }

> db.sample.find({b:2})
{ "_id" : ObjectId("4b3f338a0fc4428944029caa"), "b" : 2 }
{ "_id" : ObjectId("4b3f35000fc4428944029cab"), "b" : 2 }
{ "_id" : ObjectId("4b3f35000fc4428944029cac"), "b" : 2 }
{ "_id" : ObjectId("4b3f35010fc4428944029cad"), "b" : 2 }




三番目に登録した、_idが4b3f35000fc4428944029cacのデータを取得するには


> db.sample.find({_id:ObjectId("4b3f35000fc4428944029cac")})
{ "_id" : ObjectId("4b3f35000fc4428944029cac"), "b" : 2 }





データの更新



データを更新するには、取得したデータを変数に退避し、内容を変更。
変更したオブジェクトをsaveの引数に指定します。

例として、三番目に登録したbの値を2から3に変更してみます。


> data = db.sample.findOne({_id:ObjectId("4b3f35000fc4428944029cac")})
{ "_id" : ObjectId("4b3f35000fc4428944029cac"), "b" : 2 }
> data.b = 3
3
> db.sample.save( data )
> db.sample.find()
{ "_id" : ObjectId("4b3f32472ba7942e3424e7ab"), "a" : 1 }
{ "_id" : ObjectId("4b3f338a0fc4428944029caa"), "b" : 2 }
{ "_id" : ObjectId("4b3f35000fc4428944029cab"), "b" : 2 }
{ "_id" : ObjectId("4b3f35000fc4428944029cac"), "b" : 3 }
{ "_id" : ObjectId("4b3f35010fc4428944029cad"), "b" : 2 }




ちゃんと狙った箇所の値が変更されました。



データの削除



データの削除は、
db.[コレクション名].remove( [削除するオブジェクト] )
の形式で実行します。

また、削除するオブジェクトを指定しない場合は、コレクション内
全てのデータが削除されます。

例としてbの値が2のデータを削除してみます。


> db.sample.remove({b:2})
> db.sample.find()
{ "_id" : ObjectId("4b3f32472ba7942e3424e7ab"), "a" : 1 }
{ "_id" : ObjectId("4b3f35000fc4428944029cac"), "b" : 3 }





コレクションの削除



コレクションを削除するには、
db.[コレクション名].drop()
を実行します。

当然ですが、コレクションに保存していたデータは全て失われます。




これでほぼデータ操作の基本は網羅できたかと思います。




関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ