MongoDBをインストールしたので、まずはMongoDB Shellで遊んでみましょう。リファレンスはこちらですからね。
mongo Shell Methods
http://docs.mongodb.org/manual/reference/method/
help
何はともあれ、まずはヘルプ。
> help db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help help keys key shortcuts help misc misc things to know help mr mapreduce 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 show logs show the accessible logger names show log [name] prints out the last segment of log in memory, 'global' is default use <db_name> set current database 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 DBQuery.shellBatchSize = x set default number of items to display on shell exit quit the mongo shell
最初、「help;」って打ったらJavaScriptのソースが現れて、超ビックリしました…。
> help; function (x) { if (x == "mr") { print("\nSee also http://dochub.mongodb.org/core/mapreduce"); print("\nfunction mapf() {"); print(" // 'this' holds current document to inspect"); print(" emit(key, value);") 〜省略〜
dbに対する関数一覧を見る
ヘルプに書いてありましたが、「db.help()」を使います。
> db.help()
データベースの一覧を見る
「show dbs」です。
> show dbs local 0.078125GB tutorial 0.203125GB
データベースの切り替え
「use」を使います。
> use tutorial; switched to db tutorial
コマンド実行時点で、データベースが存在しなくても切り替えられます。
なお、データベースは、コレクションにデータを保存する際に存在しなければ勝手に作られるらしいので、気にしなくていいっぽいです…。
データベースを削除する
「db.dropDatabase()」で、現在接続しているデータベースを削除します。
> db.dropDatabase() { "dropped" : "tutorial", "ok" : 1 }
このコマンド、怖いです…。
ドキュメントを作成する
要は、INSERTです。「db.[コレクション名].insert」で。
> db.nosqls.insert({name: "MongoDB", type: "Document Database"})
コレクションが存在しなかった場合は、自動的に作成されるようで。
「MongoDB イン・アクション」によると、ドライバをstrictモードにすればこの挙動は変えられるそうな?
ドキュメントを取得する
「db.[コレクション名].find()」で。
> db.nosqls.find() { "_id" : ObjectId("51b9b6a715349740afd96f8e"), "name" : "MongoDB", "type" : "Document Database" } { "_id" : ObjectId("51b9b6fe15349740afd96f8f"), "name" : "Apache Cassandra", "type" : "Column Database" } { "_id" : ObjectId("51b9b77815349740afd96f90"), "name" : "Apache HBase", "type" : "Column Database" } { "_id" : ObjectId("51b9b78815349740afd96f91"), "name" : "Infinispan", "type" : "In Memory Data Grid" }
戻り値は、カーソルということらしいです。
引数に、JSONっぽいものでクエリが指定できるようで。
>|javascript||
> db.nosqls.find({name: "MongoDB"})
{ "_id" : ObjectId("51b9b6a715349740afd96f8e"), "name" : "MongoDB", "type" : "Document Database" }
|
1件だけ取得する時は、「db.[コレクション名].findOne()」。
> db.nosqls.findOne() { "_id" : ObjectId("51b9b6a715349740afd96f8e"), "name" : "MongoDB", "type" : "Document Database" }
こちらも、条件指定で。
> db.nosqls.findOne({name: "Apache HBase"}) { "_id" : ObjectId("51b9b77815349740afd96f90"), "name" : "Apache HBase", "type" : "Column Database" }
コレクションの数を数える
コレクションの数(要は、レコード数?)を数えるには、「「db.[コレクション名].count()」。
> db.nosqls.count() 4
こちらも、条件指定が可能。
> db.nosqls.count({name: "Apache Cassandra"}) 1
ドキュメントの更新
ドキュメントを更新を更新するには、「db.[コレクション名].update」。
> db.nosqls.update({name: "MongoDB"}, {$set: {url: "http://www.mongodb.org/"}})
更新対称を決めるためのクエリと、$set演算子を付けるらしいです。
更新されてます、と。
> db.nosqls.findOne({name: "MongoDB"}) { "_id" : ObjectId("51b9b6a715349740afd96f8e"), "name" : "MongoDB", "type" : "Document Database", "url" : "http://www.mongodb.org/" }
値を削除するように更新したい場合は、$unset演算子。
> db.nosqls.update({name: "MongoDB"}, {$unset: {url: 1}})
追加したプロパティが消えましたよ。
> db.nosqls.findOne({name: "MongoDB"}) { "_id" : ObjectId("51b9b6a715349740afd96f8e"), "name" : "MongoDB", "type" : "Document Database" }
save
「db.[コレクション名].save」を使用すると、ドキュメントが存在すればupdate、なければinsertという挙動をさせることができます。
とはいえ、_idを指定しないと延々とinsertになるだけですが。
> db.nosqls.save({name: "MongoDB", type: "Document Database"})
updateにしたい場合は、_idプロパティを指定します。
> db.nosqls.save({_id: ObjectId("51b9bbad15349740afd96f99") ,name: "MongoDB", type: "Document Database", url: "http://www.mongodb.org/"})
ドキュメントを削除する
「db.[コレクション名].remove」で。
特定のドキュメントを削除したい場合は、クエリを引数に与えます。
> db.nosqls.remove({name: "MongoDB"})
全部削除したい場合は、引数なしで。
> db.nosqls.remove()
Mongo Shellを終了する
「exit」です。
> exit bye