MongoDBの基本操作メモ



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

起動から基本操作

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

[shell]
> mongo
[/shell]

データベース一覧表示

[shell]
> show dbs;
[/shell]

データベース選択

特にDBを作成する指示がなくてもDBを変更できて、保存した時に作成してくれる。
[shell]
> use hogedb;
[/shell]

コレクション操作

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

collection作成

[shell]
> db.createcollection("testcollection");
[/shell]

collection一覧表示

[shell]
> show collections;
[/shell]

ドキュメント追加・保存

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

普通の文字列保存

[shell]
> db.testcollection.save( {"data" : "save_data"} );
[/shell]

複数ドキュメントの保存

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

配列保存

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

ネストデータ保存

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

ドキュメント検索

ドキュメントを取得

[shell]
> 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" } }
[/shell]

キーの値で検索

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

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

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

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

[shell]
> 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 ] }
[/shell]

データ更新

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

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

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

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

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

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

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

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

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

エラーが出ました。複数のドキュメントに対してupdateする場合には $ オペレータを使わないといけないらしいです。
[shell]
> db.testcollection.update(
{"data":"updated"},
{$set:{"data":0}},
false,
true
);
[/shell]

ドキュメント削除

指定ドキュメント削除

[shell]
> db.testcollection.remove({"data":0});
[/shell]

全ドキュメント削除

[shell]
> db.testcollection.remove();
[/shell]

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

[javascript]
// 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 }
[/javascript]



One thought on “MongoDBの基本操作メモ

コメントを残す