MongoDBの基本操作メモ

MongoDBの基本操作(コレクション作成, インサート, アップデート, デリート)のメモ。

起動から基本操作

コマンドラインからMongoクライアントツールを起動

> mongo

データベース一覧表示

> show dbs;

データベース選択

特にDBを作成する指示がなくてもDBを変更できて、保存した時に作成してくれる。

> use hogedb;

コレクション操作

ややこしいが、リレーショナルDBでのテーブルをMongoDBではコレクションと呼ぶらしい。
これも明示的な指示をせずに中身を適当にインサートするだけでコレクションも作成されるけど作成方法のメモ。

collection作成

> db.createcollection("testcollection");

collection一覧表示

> show collections;

ドキュメント追加・保存

MongoDBではデータの中身をドキュメントと呼ぶ。

普通の文字列保存

> db.testcollection.save( {"data" : "save_data"} );

複数ドキュメントの保存

> testcollection.save( {"name" : "Laddy", "age" : 28} );

配列保存

> db.testcollection.save( {"number" : [1, 2, 3, 4] } );

ネストデータ保存

> db.testcollection.save( {"list" : {"data1" : "one", "data2" : "two"} } );

ドキュメント検索

ドキュメントを取得

> db.testcollection.find();
{ "_id" : ObjectId("50e023cf1d5b651f6b93ef84"), "data" : "save_data" }
{ "_id" : ObjectId("50e023fe1d5b651f6b93ef85"), "name" : "Laddy", "age" : 28 }
{ "_id" : ObjectId("50e024831d5b651f6b93ef86"), "number" : [ 1, 2, 3, 4 ] }
{ "_id" : ObjectId("50e024cf1d5b651f6b93ef87"), "list" : { "data1" : "one", "data2" : "two" } }

キーの値で検索

> db.testcollection.find( { "name" : "Laddy"} );
{ "_id" : ObjectId("50e023fe1d5b651f6b93ef85"), "name" : "Laddy", "age" : 28 }

ネストしたデータの検索(キーの値を.でつなげる)

> db.testcollection.find( {"list.data1" : "one"} );
{ "_id" : ObjectId("50e024cf1d5b651f6b93ef87"), "list" : { "data1" : "one", "data2" : "two" } }

配列の検索(配列内のデータどれかに該当すれば表示される)

> db.testcollection.find( {"number" : 2} );
{ "_id" : ObjectId("50e024831d5b651f6b93ef86"), "number" : [ 1, 2, 3, 4 ] }
> db.testcollection.find( {"number" : 1} );
{ "_id" : ObjectId("50e024831d5b651f6b93ef86"), "number" : [ 1, 2, 3, 4 ] }

データ更新

db.testcollection.update( 検索対象, 更新内容, アップサートフラグ, 複数アップデートフラグ );

updateを行う場合、引数によって挙動ががらっと変わるので注意。

  • どれをどう更新するかが1と2引数
  • 3引数: trueの場合更新するデータがあれば更新して無ければインサート
    逆にfalseの場合にはupdateはするけどインサートはしない
  • 4引数: trueの場合複数の該当するドキュメントに対してアップデートを行う

シンプルなupdate(対象は最初に見つかったドキュメントのみ)

> db.testcollection.update( { name : "Laddy" }, { age : 30 } );

検索対象がなければインサートを行うupdate

> db.testcollection.update({"hogehoge":12}, {"hogehoge":11}, true)

複数のドキュメント対象のupdate

> db.testcollection.update({"data":"save_data"},{"data":"updated"},false,true);
multi update only works with $ operators

エラーが出ました。複数のドキュメントに対してupdateする場合には $ オペレータを使わないといけないらしいです。

> db.testcollection.update(
  {"data":"updated"},
  {$set:{"data":0}},
  false,
  true
);

ドキュメント削除

指定ドキュメント削除

> db.testcollection.remove({"data":0});

全ドキュメント削除

> db.testcollection.remove();

ロジックを利用したデータ操作

// 10回データを入力
> for(var i = 0; i < 10; i++){
... db.testcollection.save({"insert_data":i});
... }
> db.testcollection.find();
{ "_id" : ObjectId("50e023cf1d5b651f6b93ef84"), "data" : "save_data" }
{ "_id" : ObjectId("50e023fe1d5b651f6b93ef85"), "name" : "Laddy", "age" : 28 }
{ "_id" : ObjectId("50e024831d5b651f6b93ef86"), "number" : [ 1, 2, 3, 4 ] }
{ "_id" : ObjectId("50e024cf1d5b651f6b93ef87"), "list" : { "data1" : "one", "data2" : "two" } }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef89"), "insert_data" : 0 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef8a"), "insert_data" : 1 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef8b"), "insert_data" : 2 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef8c"), "insert_data" : 3 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef8d"), "insert_data" : 4 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef8e"), "insert_data" : 5 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef8f"), "insert_data" : 6 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef90"), "insert_data" : 7 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef91"), "insert_data" : 8 }
{ "_id" : ObjectId("50e03aeb1d5b651f6b93ef92"), "insert_data" : 9 }