Skip to content

Instantly share code, notes, and snippets.

@TomA-R
Forked from jmoiron/bongo.sh
Last active December 24, 2015 10:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TomA-R/6787439 to your computer and use it in GitHub Desktop.
Save TomA-R/6787439 to your computer and use it in GitHub Desktop.
#!/bin/bash
LOADING=false
while [ $# -gt 0 ] ; do
case "$1" in
-h|--help)
echo "usage: $package [options] dbname"
echo " "
echo "OPTIONS:"
echo " --help Show this help."
echo " -l, --load Load instead of export"
echo " -u, --username TheUser Mongo username"
echo " -p, --password ThePass Mongo password"
echo " -h, --host host.name Mongo host string (ex. localhost:27017)"
exit
;;
-l|--load)
LOADING=true
shift
;;
-u|--username)
shift
USERNAME="$1"
shift
;;
-p|--password)
shift
PASSWORD="$1"
shift
;;
-h|--host)
shift
HOST="$1"
shift
;;
*)
break
;;
esac
done
if [ -z "$1" ]; then
echo "Usage: ./bongo.sh [opts] <dbname>"
exit 1
fi
DB="$1"
if [ -z "$HOST" ]; then
CONN="localhost:27017/$DB"
else
CONN="$HOST/$DB"
fi
ARGS=""
if [ -n "$USERNAME" ]; then
ARGS="-u $USERNAME"
fi
if [ -n "$PASSWORD" ]; then
ARGS="$ARGS -p $PASSWORD"
fi
echo "************** Mongo Export **************"
echo "* Host: $HOST"
echo "* Database: $DB"
echo "* Username: $USERNAME"
echo "* Password: $PASSWORD"
echo "* Loading: $LOADING"
echo "******************************************"
if $LOADING ; then
echo "Loading into $CONN"
tar -xzf $DB.tar.gz
pushd $DB >/dev/null
for path in *.json; do
collection=${path%.json}
echo "Loading into $DB/$collection from $path"
mongoimport $ARGS -d $DB -c $collection $path
done
popd >/dev/null
rm -rf $DB
else
DATABASE_COLLECTIONS=$(mongo $CONN $ARGS --quiet --eval 'db.getCollectionNames()' | sed 's/,/ /g')
mkdir /tmp/$DB
pushd /tmp/$DB 2>/dev/null
for collection in $DATABASE_COLLECTIONS; do
mongoexport --host $HOST $ARGS -db $DB -c $collection --jsonArray -o $collection.json >/dev/null
done
pushd /tmp 2>/dev/null
tar -czf "$DB.tar.gz" $DB 2>/dev/null
popd 2>/dev/null
popd 2>/dev/null
mv /tmp/$DB.tar.gz ./ 2>/dev/null
rm -rf /tmp/$DB 2>/dev/null
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment