CLOVER🍀

That was when it all began.

MongoDB Shellで遊ぶ

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()

コレクションを削除する

「db.[コレクション名].drop」で。

> db.nosqls.drop()
true

Mongo Shellを終了する

「exit」です。

> exit
bye