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()
を実行します。
当然ですが、コレクションに保存していたデータは全て失われます。
これでほぼデータ操作の基本は網羅できたかと思います。
- 関連記事
-
- MongoDBに一括でデータを登録する(Bulk Inserts)
- MongoDBをPythonで操作する(PyMongo使用)
- MongoDBのHttp Interface
- MongoDBのクライアントツールを使用してデータを操作する
- DebianにMongoDBをインストールする
コメント