Guest User

Untitled

a guest
Nov 5th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. LOADING=false
  4. DEBUG=/dev/null
  5.  
  6. usage()
  7. {
  8. cat << EOF
  9. usage: $0 [options] <DBNAME>
  10. OPTIONS:
  11. -h Show this help.
  12. -l Load instead of export
  13. -u Mongo username
  14. -p Mongo password
  15. -H Mongo host string (ex. localhost:27017)
  16. -q Mongo query for export (JSON string)
  17. -L Limit exported results to this amount
  18. -d Show (debug) error messages in console
  19. EOF
  20. }
  21.  
  22. while getopts "hldu:p:H:q:L:" opt; do
  23. MAXOPTIND=$OPTIND
  24.  
  25. case $opt in
  26. h)
  27. usage
  28. exit
  29. ;;
  30. l)
  31. LOADING=true
  32. ;;
  33. d)
  34. DEBUG=/dev/stderr
  35. ;;
  36. u)
  37. USERNAME="$OPTARG"
  38. ;;
  39. p)
  40. PASSWORD="$OPTARG"
  41. ;;
  42. H)
  43. HOST="$OPTARG"
  44. ;;
  45. q)
  46. QUERY="$OPTARG"
  47. ;;
  48. L)
  49. LIMIT="$OPTARG"
  50. ;;
  51. \?)
  52. echo "Invalid option $opt"
  53. exit 1
  54. ;;
  55. esac
  56. done
  57.  
  58. shift $(($MAXOPTIND-1))
  59.  
  60. if [ -z "$1" ]; then
  61. echo "Usage: $0 [options] <DBNAME>"
  62. exit 1
  63. fi
  64.  
  65. DB="$1"
  66. if [ -z "$HOST" ]; then
  67. HOST="localhost:27017"
  68. CONN="localhost:27017/$DB"
  69. else
  70. CONN="$HOST/$DB"
  71. fi
  72.  
  73. ARGS=""
  74. if [ -n "$USERNAME" ]; then
  75. ARGS="-u $USERNAME"
  76. fi
  77. if [ -n "$PASSWORD" ]; then
  78. ARGS="$ARGS -p $PASSWORD"
  79. fi
  80.  
  81. if $LOADING ; then
  82. echo "*************************** Mongo Import ************************"
  83. echo "**** Host: $HOST"
  84. echo "**** Database: $DB"
  85. echo "**** Username: $USERNAME"
  86. echo "**** Password: $PASSWORD"
  87. echo "*****************************************************************"
  88.  
  89. if [ ! -f $DB.tar.gz ]; then
  90. echo "Archive $DB.tar.gz to import from could not be found! Aborting ..."
  91. exit
  92. fi
  93.  
  94. tar -xzf $DB.tar.gz 2>$DEBUG
  95. pushd $DB 2>$DEBUG
  96.  
  97. for path in *.json; do
  98. collection=${path%.json}
  99. echo "Loading into $DB/$collection from $path"
  100. mongoimport --host $HOST $ARGS -d $DB -c $collection $path --jsonArray
  101. done
  102.  
  103. popd 2>$DEBUG
  104. rm -rf $DB 2>$DEBUG
  105. else
  106. echo "*************************** Mongo Export ************************"
  107. echo "**** Host: $HOST"
  108. echo "**** Database: $DB"
  109. echo "**** Username: $USERNAME"
  110. echo "**** Password: $PASSWORD"
  111. echo "**** Query: $QUERY"
  112. echo "**** Limit: $LIMIT"
  113. echo "*****************************************************************"
  114.  
  115. DATABASE_COLLECTIONS=$(mongo $CONN $ARGS --quiet --eval 'db.getCollectionNames().join()' | sed 's/,/ /g')
  116.  
  117. mkdir -p tmp/$DB 2>$DEBUG
  118. pushd tmp/$DB 2>$DEBUG
  119.  
  120. if [ -n "$QUERY" ]; then
  121. ARGS="$ARGS -q $QUERY"
  122. fi
  123.  
  124. for collection in $DATABASE_COLLECTIONS; do
  125. echo "Exporting collection $collection ..."
  126. mongoexport --host $HOST $ARGS -d $DB -c $collection -o $collection.json --jsonArray 2>$DEBUG
  127. if [ "$LIMIT" != "" ]; then
  128. head -n $LIMIT $collection.json > $collection.json.tmp && mv $collection.json.tmp $collection.json
  129. echo "limited result set to $LIMIT records"
  130. fi
  131. done
  132.  
  133. pushd .. 2>$DEBUG
  134. tar -czf "$DB.tar.gz" $DB 2>$DEBUG
  135. popd 2>$DEBUG
  136. popd 2>$DEBUG
  137. mv tmp/$DB.tar.gz ./ 2>$DEBUG
  138. rm -rf tmp 2>$DEBUG
  139. fi
Add Comment
Please, Sign In to add comment