実行コマンドのスクリプト化

1,027 views
Skip to first unread message

Fukuzaki Akinobu

unread,
Aug 25, 2014, 8:35:52 PM8/25/14
to mongo...@googlegroups.com
皆さん、お疲れさまです。
福崎です。

知り合いのシステム屋さんから相談受けて、検討しているのですがうまく行かないので、質問投げさせていただきます。

MongoDBをバックに使ったWebアプリを稼働させています。
外部システムから情報を取得して登録する仕組みがあるのですが、時々二重エントリーになってしまうこと、毎度取得すれば最新の状態がとれることなどから、cronで毎晩初期化処理をすることになりました。

mongoシェルで手作業でやると

 > show dbs;
 > use meta
 > show collections
 > db.objects.drop()
 > show collections
 > use body
 > show collections
 > db.objects.drop()
 > show collections
 > exit

こんな感じにmetaとbodyのDBにあるobjectsコレクションをdropしています。

これをそのまま clear.js とかに保存してmongo clear.jsとしてもshowコマンドやuseコマンドがUnexpected identifierとされるようで実行できません。
こういったオペレーションをスクリプト化したい時ってどんなスキームで実行したらよいでしょうか?

よろしくお願い致します。

------------------------------------------------------------------
Akki
Akinobu Fukuzaki

林田 敦

unread,
Aug 25, 2014, 8:57:03 PM8/25/14
to mongo...@googlegroups.com
福崎さん

お世話になっております。林田です。

このあたりがご参考になるかと。
http://dqn.sakusakutto.jp/2012/04/mongodb-batch-javascript.html

林田


2014年8月26日火曜日 9時35分52秒 UTC+9 Akki:

Tetsutaro Watanabe

unread,
Aug 25, 2014, 8:58:41 PM8/25/14
to mongo...@googlegroups.com

渡部です

useやshowはjavascriptではないからだと思います。

useはmongoクライアントの引数でDBを指定することで代用、
showはdb.getCollectionNames()で代用してはどうでしょうか?

2014/08/26 9:35 "Fukuzaki Akinobu" <akki.t...@gmail.com>:

> --
> このメールは Google グループのグループ「MongoDB JP」の登録者に送られています。
> このグループから退会し、グループからのメールの配信を停止するには mongodb-jp+...@googlegroups.com にメールを送信してください。
> このグループに投稿するには、mongo...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/mongodb-jp からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

Fukuzaki Akinobu

unread,
Aug 25, 2014, 9:27:40 PM8/25/14
to mongo...@googlegroups.com
林田さん、渡部さん、お疲れさまです。
福崎です。

ありがとうございます!!

頂いたヒントを元に、以下のようなシェルスクリプトを先方に提示することにしました。

#!/bin/bash

echo 'meta collectoins:'
META_COLS=`mongo --quiet --eval 'db.getCollectionNames().forEach(function(x){print(x)});' meta`
echo 'meta: ' $META_COLS
echo 'Drop objects collection on meta DB.'
DROP_RES=`mongo --quiet --eval 'db.objects.drop();' meta`
echo 'Drop result: ' $DROP_RES
META_COLS=`mongo --quiet --eval 'db.getCollectionNames().forEach(function(x){print(x)});' meta`
echo 'meta: ' $META_COLS
echo 'Finish meta DB.'
echo ''

echo 'body collectoins:'
BODY_COLS=`mongo --quiet --eval 'db.getCollectionNames().forEach(function(x){print(x)});' body`
echo 'body: ' $BODY_COLS
echo 'Drop objects collection on body DB.'
DROP_RES2=`mongo --quiet --eval 'db.objects.drop();' body`
echo 'Drop result: ' $DROP_RES2
BODY_COLS=`mongo --quiet --eval 'db.getCollectionNames().forEach(function(x){print(x)});' body`
echo 'body: ' $BODY_COLS
echo 'Finish body DB.'

各種変数を使って分岐処理が必要な場合はゴニョゴニョしてねって感じですかね。


2014/08/26 9:57、Tetsutaro Watanabe <fet...@gmail.com> のメール:
> このメールは Google グループのグループ「MongoDB JP」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには mongodb-jp+...@googlegroups.com にメールを送信してください。
> このグループに投稿するには mongo...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/mongodb-jp からこのグループにアクセスしてください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

------------------------------------------------------------------
Akki
Akinobu Fukuzaki

Hiroaki Kubota

unread,
Aug 26, 2014, 1:21:39 AM8/26/14
to mongo...@googlegroups.com
僕もその辺かなりいじり倒しているので、この辺が参考になるかと。。
https://github.com/monmo/



2014年8月26日 10:27 Fukuzaki Akinobu <akki.t...@gmail.com>:

Akinobu Fukuzaki

unread,
Aug 26, 2014, 3:35:31 AM8/26/14
to mongodb-jp
窪田さん、お疲れ様です。
福崎です。

おお!さすが、ちゃんとコマンドになってますね!
参考にさせていただきます!
ありがとうございます。



2014年8月26日 14:21 Hiroaki Kubota <cat.s...@gmail.com>:



--
------------------------------------------------------------------
Akki
Akinobu Fukuzaki
akki.t...@gmail.com
Reply all
Reply to author
Forward
0 new messages