MongoDB の基本的な使い方

Oracle と MongoDB の違い

MongoDB は、いわゆる NoSQL と呼ばれるデータベースである。JSON のようなドキュメントというデータを、コレクションというまとまりで保持する。既存の RDB の代表例として Excel と Oracle を使うと、MongoDB との名称の対応は次のようになる。

Excel Oracle MongoDB
Book Schema Database
Sheet Table Collection
Row Row Document
Column Column Field
Shell Field Value

サーバー

サーバーコマンドは mongod である。ここでは mongod を使ってサーバーを起動、終了するコマンドを見ていく。ここで扱わない mongod コマンドのオプションは「MongoDB コマンド mongod の使い方」を参照する。

サーバーの起動と終了

  • サーバー起動
    • データベースファイルを保存する場所が C:\mongodb\server\data に用意されているものとする。
    • コマンドプロンプトを起動し、次のコマンドを実行すると MongoDB サーバーを起動できる。
      mongod --dbpath "C:\mongodb\server\data"
      
  • サーバー終了
    • 起動中のコマンドプロンプトで Ctrl+C を押すと shutdown コマンドが発行され、MongoDB が終了する。

クライアント

上記の手順で MongoDB を起動した状態で、クライアントコマンド mongo を使って接続してみよう。MongoDB サーバーと同じサーバーから接続する場合は、サーバー起動に使ったコマンドプロンプトとは別に起動して接続する。ここで扱わない mongo の他のオプションについては「MongoDB コマンド mongo の使い方」を参照する。

サーバーへの接続と切断

  • サーバー接続
    mongo
    
    MongoDB が起動している端末と同じ端末であれば、コマンドプロンプトを起動して上記のコマンドを実行すると接続できる。別ホストの場合は、--host <ホスト名> オプションで接続先を指定する。
  • サーバー切断
    MongoDB との接続を切るには Ctrl+C を押す。また、次のコマンドを実行して切断することもできる。
    > exit
    

データベースの作成、一覧表示、変更、削除

  • データベース作成

    > use sample_database
    

    指定したデータベースに接続する。データベースが存在しない場合は作成される。

  • データベース一覧表示

    > show dbs
    

    デフォルトでは adminlocaltest の 3 つのデータベースが存在する。

    use <データベース名> を実行した直後は、作成したデータベースは一覧に表示されない。show dbs で表示されるには、少なくとも 1 件以上のデータ登録が必要である。

  • データベース名変更

    > db.copyDatabase('old_database', 'new_database')
    > use old_database
    > db.dropDatabase()
    

    残念ながらデータベース名を変更するコマンドはないため、古いデータベースを新しいデータベースへコピーし、古いデータベースを削除する形にする。

  • データベース削除

    > use sample_database
    > db.dropDatabase();
    

    削除するデータベースに接続し、db.dropDatabase() を実行すると削除できる。

コレクションの作成、一覧表示、変更、削除

  • コレクション作成

    > db.createCollection(products);
    

    引数に指定した名前のコレクションを作成する。

  • コレクション一覧表示

    > show collections
    

    現在接続しているデータベースに含まれるコレクション一覧を表示する。

  • コレクション名変更

    > db.old_collection_name.renameCollection(new_collection_name, true);
    

    old_collection_name から new_collection_name に名前を変更する。また、変更時に既存のコレクション old_collection_name を削除する場合は、第 2 引数に true を指定する。

  • コレクション削除

    > db.products.drop();
    

    指定したコレクションを削除する。

ドキュメントの追加、照会、変更、削除

  • ドキュメント追加

    > db.products.insert(
            {name: 'sample book', price: 1280}
        )
    

    指定したコレクションにドキュメントを追加する。insert を実行すると _id フィールドが自動で追加される。

  • ドキュメント照会

    > db.products.find(
             {name: {$eq: 'sample book'}}
        )
    

    引数に指定するクエリの基本形式は { フィールド: { 演算子: 値 }} である。演算子については MongoDB - Query and Projection Operators に記載されている。引数を指定しない場合は、すべてのデータが照会される。

  • ドキュメント変更

    > db.products.update(
            {name: {$eq: 'sample book'}},
            {$set: {name: 'Hack MongoDB'}},
            {upsert: false, multi: true}
        )
    

    第 1 引数で指定した条件に一致するドキュメントを、第 2 引数で指定した内容に変更する。第 3 引数のオブジェクトで指定している upsert は「条件に一致するドキュメントが見つからない場合に挿入するか」を指定し、multi は「条件に一致するすべてのドキュメントを変更対象にするか」を指定する。

  • ドキュメント削除

    > db.products.remove(
            {name: {$eq: 'sample book'}}
        )
    

    第 1 引数で指定したクエリに一致するすべてのドキュメントを削除する。

参考資料