LoginSignup
1
0

More than 3 years have passed since last update.

mongoシェルのeditコマンドを使う

Posted at

概要

下記のようにmongoシェルを使って困ることがあります。editコマンドを使って解消しましょう。

mongoシェルで困ること

mongoシェルで困ることはコマンドや関数を実行した結果がスクロールして先頭が見にくいことが良くあります。例えば次ようなコマンドを実行します。

mongo
> db.serverStatus()

この結果は次のようになり先頭のほうが見えないのでスクロールバーを操作して先頭を見なければなりません。

mongo
                               "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のメモ帳を指定します。使いたいエディタにパスが通っていないときはフルパスを指定します。

mongo
> EDITOR='notepad'

Linuxなどではvi, vimでしょう。文字列検索にはvimが便利なのでWindowsでもvimを使っています。上記の方法ではmongoシェルを起動ごとに設定しなければなりませんので、システムの環境変数に設定することもできます。

set EDITOR=notepad   #windows cmd.exe

export EDITOR=vi     #linux bash

editコマンドの使い方

エディタの設定ができたので実際の使い方です。

mongo
> var result = db.serverStatus()
> edit result

見たいコマンドの実行結果を変数に代入して、その変数に対してeditコマンドを使います。そうするとエディタ(メモ帳)が立ち上がりresultの内容がメモ帳で見ることができます。エディタ(メモ帳)を閉じるまでeditコマンドが終了しませんので注意が必要です。

notepad.png

find結果のドキュメントをエディタで見る

エディタで見ることがでるのは当然テキストだけなのでdb.collection.find()の結果を変数に代入してもドキュメントを見ることはできません。なぜならdb.collection.find()が返すのはカーソルオブジェクトだからです。 そこでtoArray()を使います。

mongo
var result = db.colllection.find().toArray()
edit result

ただし、db.collection.findOne()はドキュメントを返しますので直接変数に代入してエディタで見ることができます。find()で出力件数が多いときはlimit()を使って制限します。その他のコマンドでもドキュメントや文字列を返さないもコマンドもあるので必ず文字列に変換してから使います。

Javascriptの関数をエディタで作成する

editコマンドは一時的な関数やデータなどを作成・編集が本来の機能です。そこで簡単な関数func1を作成してみます。まず、editコマンドでエディタを立ち上げます。

mongo
> edit func1

エディタが立ち上がりますので、func1のコーディングをします。例としてコレクションのすべてのドキュメントを出力する関数です。

エディタ
function() {
   db.collection.find().forEach((doc) => {
       printjson(doc);
   });
}

エディタで上書き保存して終了します。文法にエラーがあるとfunc1変数は上書きされませんので、もう一度入力しください。だたし、エラーの場合func1に上書きされていませんので入力したものは消えてしまい、前の状態です。 無事func1に代入できたらfunc1を実行します。

mongo
> func1()

collectionの全ドキュメントが出力される

func1を変更したい場合はエディタを再度立ち上げて編集できます。

insertするドキュメントをエディタで作成する

mongo
> edit docs

エディタで次のようなデータを作成します。

エディタ
[
  {a:1, b:101},
  {a:2, b:102},
  {a:3, b:103}
]

上記のドキュメントがdocs変数の代入されますので、これを使ってinsertする。

mongo
> db.collection.insert(docs)

エディタを切り替えるJavascript

ユーザーのホームディレクトリに.mongorc.jsがあるとmongoを立ち上げたときに読み込まれるので、ここでEDITOR変数にセットする関数を用意します。

.mongorc.js

//デフォルトのエディタ
EDITOR='vim';

function vim() {
    EDITOR='vim';
}
function notepad() {
    EDITOR='notepad';
}

デフォルトがvimなのでメモ帳に変更する。

mongo
> notepad()
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0