Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

MongoDBでよく使うコマンドなど

More than 3 years have passed since last update.

最近使い始めたMongoDB。
でもまだコマンドを覚えきれていなくて、毎回参考サイト様にお邪魔しているので、よく使うものをここに書き出していこうと思います。

MongoDBをWindows10環境にインストールした時の記事は間違って消してしまったので、それはまた後で書こうと思います。(なかなかの傷心です…頑張って書いたのにね(´;ω;`)ウゥゥ)

■参考サイト様

MongoDB 3.0.6(Windows版)をインストールして起動するまでの手順
MongoDB Shellで遊ぶ
Mongoシェルのfindで20件以上表示させる方法
[MongoDB] Type “it” for more が面倒な場合
シェルスクリプトだけでMySQLからMongoDBへの移行しちゃう
mongoの使い方ー設定編

■起動と終了

起動

  1. データを保存する場所とログを保存する場所を確保する
    今回は、以下の場所を確保しました。

    • データの保存場所⇒c:\mongodb\db
    • ログの保存場所⇒c:\mongodb\logs
  2. コマンドプロンプトでMongoDBを起動する

mongo --dbpath C:\mongodb\data\data --logpath C:\mongodb\logs\mongodb.log

終了

  1. 別のコマンドプロンプトでMongoDBを終了する
mongo
use admin
db.shutdownServer()
quit()

■MongoShellの起動と終了

起動

  1. コマンドプロンプトでMongoShellを起動する
mongo [接続先ホスト名]

localhostだと省略可能みたいです。
リモート接続する場合は、IPアドレスを入力して使っています。

終了

  1. コマンドプロンプトでMongoShellを終了する
exit

■データベースの操作

一覧表示

show dbs

切替

use [データベース名]

■コレクションの操作

一覧表示

show collections

データ表示

db.[コレクション名].find()

ただ、結果が20件以上だと「type "it" for more」が表示されてしまい、全件表示されません。原因は、負荷軽減のために最大表示数が20に設定されているそうです。なので、以下のコマンドで設定値を20から例えば100とか300とかに変更してあげればよいとのこと。

DBQuery.shellBatchSize = 100

データ件数取得

db.[コレクション名].count()

■その他

CSVファイルをコレクションにインポート

mongoimport --host [接続先ホスト] -d [データベース名] -c [コレクション名] --type csv --file [csvファイル名] --headerline --drop

mongoimportのオプションについて
 --host 接続先ホスト(IPアドレスとかlocalhostとか)
 --port 接続先ポート(省略しても大丈夫みたいだけど…デフォルト以外だと記述しないとダメかもしれない)
 -d データベース名
 -c コレクション名
 --type 読込ファイルタイプ
 --file 読込ファイル名
 --headerline 最初の行をヘッダーとして見る(フィールド名になる)
 --drop インポート前にコレクションを削除…(追加に変えたいなぁ)

jsファイルを実行

今回はデータ移行で使用しているのですが、例えばデータを加工しながら移行先にデータを登録する場合に、バッチファイルみたいなものが使えたら便利だなぁと思って調べていたら、jsファイルが使えるとのこと。
なので、↓こんな内容のjsを作って、それをコマンドで実行する事にしました。
(以下のjsは実際のソースに手を入れているので、動かないかもしれません…なのでコピーして使わないでくださいね)

var DB1 = db.getMongo().getDB('db1');
var DB2 = db.getMongo().getDB('db2');
// 移行データ(DATA1)の全データを変数datasへ
var datas = DB1.DATA1.find();
// 移行先データを書き込む
datas.forEach(function(data){
    if (data) {
        // データ書き込み
        DB2.DATA2.insert({
        "FIELD1" : data.FIELD1,
        "FIELD2" : data.FIELD2
        })
    }
});

で、実際に実行する時のコマンドはこちら

mongo [接続先ホスト] --quiet [JSファイル名]

mongo shellのオプションについて
 --quiet 接続プロセス中にシェルからの出力を停止する
※jsファイルは、コマンドを実行する実行環境に置いておくこと。

■あとがき

調べたことを追記していきます。

HachiwareWorks
こんにちは。 HachiwareWorksのまゆです。 今まで、VisualStudioでの開発をメインに業務アプリの開発を行ってきました。 近年では、Webシステム開発などが多くなりつつあります。 これからは、Webデザイン・フロントエンジニアとして活動していこうと画策中です。 よろしくお願いいたします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away