概要
下記のようにmongoシェルを使って困ることがあります。edit
コマンドを使って解消しましょう。
mongoシェルで困ること
mongoシェルで困ることはコマンドや関数を実行した結果がスクロールして先頭が見にくいことが良くあります。例えば次ようなコマンドを実行します。
> db.serverStatus()
この結果は次のようになり先頭のほうが見えないのでスクロールバーを操作して先頭を見なければなりません。
"readersCreated" : NumberLong(0)
},
"preload" : {
"docs" : {
"num" : 0,
"totalMillis" : 0
},
"indexes" : {
"num" : 0,
"totalMillis" : 0
}
}
},
"storage" : {
"freelist" : {
"search" : {
"bucketExhausted" : NumberLong(0),
"requests" : NumberLong(0),
"scanned" : NumberLong(0)
}
}
},
"ttl" : {
"deletedDocuments" : NumberLong(0),
"passes" : NumberLong(899)
}
},
"ok" : 1
}
>
こんなときはedit
コマンドを使いましょう。
editコマンドを使うための設定
まず、mongoシェル上でEDITOR
変数に使いたい外部エディタプログラムを代入します。例としてWindowsのメモ帳を指定します。使いたいエディタにパスが通っていないときはフルパスを指定します。
> EDITOR='notepad'
Linuxなどではvi, vim
でしょう。文字列検索にはvim
が便利なのでWindowsでもvim
を使っています。上記の方法ではmongoシェルを起動ごとに設定しなければなりませんので、システムの環境変数に設定することもできます。
set EDITOR=notepad #windows cmd.exe
export EDITOR=vi #linux bash
editコマンドの使い方
エディタの設定ができたので実際の使い方です。
> var result = db.serverStatus()
> edit result
見たいコマンドの実行結果を変数に代入して、その変数に対してedit
コマンドを使います。そうするとエディタ(メモ帳)が立ち上がりresult
の内容がメモ帳で見ることができます。エディタ(メモ帳)を閉じるまでedit
コマンドが終了しませんので注意が必要です。
find結果のドキュメントをエディタで見る
エディタで見ることがでるのは当然テキストだけなのでdb.collection.find()
の結果を変数に代入してもドキュメントを見ることはできません。なぜならdb.collection.find()
が返すのはカーソルオブジェクトだからです。 そこでtoArray()
を使います。
var result = db.colllection.find().toArray()
edit result
ただし、db.collection.findOne()
はドキュメントを返しますので直接変数に代入してエディタで見ることができます。find()
で出力件数が多いときはlimit()
を使って制限します。その他のコマンドでもドキュメントや文字列を返さないもコマンドもあるので必ず文字列に変換してから使います。
Javascriptの関数をエディタで作成する
edit
コマンドは一時的な関数やデータなどを作成・編集が本来の機能です。そこで簡単な関数func1
を作成してみます。まず、edit
コマンドでエディタを立ち上げます。
> edit func1
エディタが立ち上がりますので、func1
のコーディングをします。例としてコレクションのすべてのドキュメントを出力する関数です。
function() {
db.collection.find().forEach((doc) => {
printjson(doc);
});
}
エディタで上書き保存して終了します。文法にエラーがあるとfunc1
変数は上書きされませんので、もう一度入力しください。だたし、エラーの場合func1
に上書きされていませんので入力したものは消えてしまい、前の状態です。 無事func1
に代入できたらfunc1
を実行します。
> func1()
collectionの全ドキュメントが出力される
func1
を変更したい場合はエディタを再度立ち上げて編集できます。
insertするドキュメントをエディタで作成する
> edit docs
エディタで次のようなデータを作成します。
[
{a:1, b:101},
{a:2, b:102},
{a:3, b:103}
]
上記のドキュメントがdocs
変数の代入されますので、これを使ってinsert
する。
> db.collection.insert(docs)
エディタを切り替えるJavascript
ユーザーのホームディレクトリに.mongorc.js
があるとmongo
を立ち上げたときに読み込まれるので、ここでEDITOR
変数にセットする関数を用意します。
//デフォルトのエディタ
EDITOR='vim';
function vim() {
EDITOR='vim';
}
function notepad() {
EDITOR='notepad';
}
デフォルトがvim
なのでメモ帳に変更する。
> notepad()