MongoDB shell で moment.js や underscore.js などの便利ライブラリを使えるように拡張する mesh.js

Tadashi Shigeoka ·  Thu, June 30, 2016

MongoDB shell で JavaScript の有名なライブラリを使えるように拡張する mesh.js が便利だったのでご紹介します。

MongoDB | モンゴディービー

mesh.js のインストール

まず mesh.js をダウンロードします。

curl -O https://raw.githubusercontent.com/skratchdot/mesh/master/mesh.js

次に MongoDB shell で mesh.js ファイルを読み込んで shell から使えるようにします。読み込み方は2パターンあります。

.mongorc.js に load メソッドで読み込むパターン

.mongorc.js ファイルに下記のように

load('/path/to/mesh.js');

MongoDB shell 起動時に読み込むパターン

MongoDB shell 起動時に mesh.js ファイルを指定して読み込むことができます。

mongo --shell /path/to/mesh.js

個人的には .mongorc.js に書く方が無意識に使えるので便利です。

[事例] moment.js が使えて日付演算がめっちゃ楽

例えば、EC サイトで商品ページ productpages が公開日 published_at から1ヶ月毎の日付を確認したい場合は以下のように使えます。

> var productPage = db.productpages.findOne( ObjectId( "568f2d5f2e2195f01f663e3d" ) )

> productPage.published_at
ISODate("2016-01-08T04:08:59.822Z")

> var m = moment( productPage.published_at );
> m.toDate()
ISODate("2016-01-08T04:08:59.822Z")

> m.clone().add( 30, 'days' ).toDate()
ISODate("2016-02-07T04:08:59.822Z")
> m.clone().add( 60, 'days' ).toDate()
ISODate("2016-03-08T04:08:59.822Z")
> m.clone().add( 90, 'days' ).toDate()
ISODate("2016-04-07T04:08:59.822Z")

他にも時刻情報を Google スプレッドシートで扱いたい場合は moment.js の format メソッドを使って整形できるのは最高です。

> m.format('YYYY-MM-DD HH:mm:ss')
2016-01-08 04:08:59

まとめ

MongoDB shell で日付の演算をしたくなったら迷わずに mesh.js をインストールすると moment.js が使えて幸せになれそうです。