Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save toya33/90dd821ad54339a3f5c1 to your computer and use it in GitHub Desktop.
Save toya33/90dd821ad54339a3f5c1 to your computer and use it in GitHub Desktop.
#!/bin/sh
#概要:
# ローカルのmongodbサーバに対してfindコマンドを実行する
# 対象のコレクション名は第一引数、検索条件は第二引数で指定する
# 第二引数がない場合は検索条件なしで第一引数のコレクションに対し
# findコマンドを実行する
#
#引数:
# 第一引数-コレクション名
# 第二引数-検索条件
#
#戻り値
# 1行目-ドキュメントの数
# 2行目-検索結果のドキュメント
function findByConditions()
{
if [ ! $# -ge 2 ]; then
echo "error : mongodfbAccesser.sh findByConditions() argument number is invalid."
exit 1
fi
COLLECTION_NAME=$1
SEARCH_CONDITIONS=${@:2}
SEARCH_RESUTL_NUMBER=0
#mongodbにアクセスし、その結果を保存する
TMP=`mongo --eval "printjson(db.${COLLECTION_NAME}.find($SEARCH_CONDITIONS).toArray())"`
SEARCH_RESULT=`echo "$TMP" | sed -e '1,2d'`
#todo:検索結果の数を算出する処理
#shellScriptからmongodbのfindコマンドを実行した場合
#ドキュメントがヒットすると結果はJSON形式かつ複数行で表示される(2015/10/23)
if [ `echo "$SEARCH_RESULT" | wc -l` -ne 1 ]; then
#JSON形式では要素の区切りを「},」にしているため
#その数に1を加算することでヒットしたドキュメント
#の数を算出することができる(2015/10/23)
SEARCH_RESUTL_NUMBER=`echo "$SEARCH_RESULT" | grep -c "},"`
SEARCH_RESUTL_NUMBER=`expr $SEARCH_RESUTL_NUMBER + 1`
fi
echo $SEARCH_RESUTL_NUMBER
echo "$SEARCH_RESULT"
return 0
}
#検索条件を設定する
condition="{\"registDate\": {\"\$gte\": ISODate(\"2015-10-20T13:00:00\")}}"
COMMAND_RESULT=`findByConditions datemgt $condition`
#コマンドの実行結果の一行目(ドキュメントの数)だけ取り出す
COUNT_DOC=`echo "$COMMAND_RESULT" | head -n 1`
#コマンドの実行結果の二行目以降(ドキュメントのの内容)を取り出す
DOC=`echo "$COMMAND_RESULT" | tail -n +2`
echo "count document : $COUNT_DOC"
if [ $COUNT_DOC -eq 0 ]
then
echo "content document: nothing"
else
echo "content document: "
echo "$DOC"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment