Sling Academy
Home/MongoDB/How to run MongoDB commands from bash script (with examples)

How to run MongoDB commands from bash script (with examples)

Last updated: February 03, 2024

Introduction

MongoDB, a popular NoSQL database, offers robust features for dealing with JSON-like documents. Despite having a powerful shell, mongodb-cli, and drivers for various programming languages, sometimes quick shell automation is preferred. Bash scripting, a powerful part of Linux and Unix systems, allows you to automate command execution.

Running MongoDB commands from a bash script can streamline database maintenance, automate repetitive tasks, and orchestrate complex operations. In this tutorial, we will cover the basics of writing bash scripts to interact with MongoDB and provide practical examples to illustrate how to accomplish various tasks.

Prerequisites

  • A running MongoDB instance.
  • Basic knowledge of shell scripting.
  • Knowledge of MongoDB CRUD operations.

Executing Simple MongoDB Commands

The most straightforward way to run a MongoDB command from a bash script is by using the mongo executable with the --eval flag, which allows you to pass a JavaScript expression directly to the MongoDB shell.

#!/bin/bash
echo "Running a simple MongoDB command"
mongo --eval 'db.runCommand({ping: 1})';

This code will output something like:

{ "ok" : 1 }

Inserting Documents

Let’s create a script that inserts a new document into a collection named users.

#!/bin/bash

dbName="mydb"
collectionName="users"
document='{"name":"John Doe","age":30,"city":"New York"}'

mongo $dbName --eval "db.$collectionName.insert($document)"

When run, the script will insert the document into the specified collection and output the result of the insertion.

Running Scripts with mongo Shell

You might also want to run an external JavaScript file containing multiple MongoDB commands. Use the mongo command without the --eval flag and specify the JavaScript file.

#!/bin/bash

scriptPath="path/to/your/script.js"

mongo $dbName $scriptPath

The JavaScript file may contain:

db.users.insertOne({ name: "Jane Doe", age: 25, city: "Los Angeles" });
db.products.updateOne({ _id: ObjectId("507f191e810c19729de860ea") },
 { $set: { stock: 10 } });
db.orders.remove({ status: "Cancelled" });

Backup and Restore Operations

Bash scripting can be particularly useful for database backups and restores using mongodump and mongorestore. Here’s an example of a backup script:

#!/bin/bash

backupDir="/path/to/backup/dir"

date=$(date +"%m-%d-%y")
# Backup the database
echo "Creating backup for $dbName on $date"
mongodump --db $dbName --out $backupDir/$date

To restore the database:

#!/bin/bash

backupDir="/path/to/backup/dir"

dateToRestore="01-01-23"

echo "Restoring $dbName from backup on $dateToRestore"
mongorestore --db $dbName $backupDir/$dateToRestore/$dbName

Advanced Usage: Automation with Loops

Advanced scripts can include loops, reading from files, and conditional logic. Here’s an example that iterates over a list of collections to back them up individually:

#!/bin/bash

backupDir="/path/to/backup/"
collections=("users" "orders" "products")

date=$(date +"%m-%d-%y")
for collection in "${collections[@]}"
do
    echo "Backing up $collection"
    mongodump --db $dbName --collection $collection --out $backupDir/$date

done

Handling User Inputs and Arguments

Incorporating user input can make your scripts interactive. The following example shows how you can accept database and collection names as arguments.

#!/bin/bash

if [ "$#" -ne 2 ]; then
    echo "Usage: $0  "
    exit 1
fi

dbName=$1
collectionName=$2

mongo --eval "printjson(db.$collectionName.stats())" $dbName

Error Handling

Solid error handling is crucial in scripts. Check the exit status of each MongoDB command to ensure your operations succeed.

#!/bin/bash
echo "Running a MongoDB command with error handling"
mongo --eval 'db.runCommand({ping: 1})'

if [ "${?}" -ne 0 ]; then
    echo "MongoDB command failed";
    exit 1;
else
    echo "MongoDB command executed successfully";
fi

Automation with Cron

Finally, for automation, you can pair your bash scripts with cron jobs to schedule tasks. The following cron job runs a backup script every day at midnight:

# In your crontab0 0 * * * /path/to/your/backup_script.sh

Conclusion

We have explored how to unleash the potential of MongoDB operations within bash scripts, providing examples from basic to more advanced applications. These fundamental concepts can be applied to automate your database tasks efficiently and reliably. Remember to secure your scripts, especially if they contain sensitive information, and always test your scripts thoroughly before using them in a production environment.

Next Article: MongoDB: How to replace a substring in a string (with examples)

Previous Article: MongoDB: Sorting Documents by a Field but NULL First/Last

Series: MongoDB Tutorials

MongoDB

You May Also Like

  • MongoDB: How to combine data from 2 collections into one
  • Hashed Indexes in MongoDB: A Practical Guide
  • Partitioning and Sharding in MongoDB: A Practical Guide (with Examples)
  • Geospatial Indexes in MongoDB: How to Speed Up Geospatial Queries
  • Understanding Partial Indexes in MongoDB
  • Exploring Sparse Indexes in MongoDB (with Examples)
  • Using Wildcard Indexes in MongoDB: An In-Depth Guide
  • Matching binary values in MongoDB: A practical guide (with examples)
  • Understanding $slice operator in MongoDB (with examples)
  • Caching in MongoDB: A practical guide (with examples)
  • CannotReuseObject Error: Attempted illegal reuse of a Mongo object in the same process space
  • How to perform cascade deletion in MongoDB (with examples)
  • MongoDB: Using $not and $nor operators to negate a query
  • MongoDB: Find SUM/MIN/MAX/AVG of each group in a collection
  • References (Manual Linking) in MongoDB: A Developer’s Guide (with Examples)
  • MongoDB: How to see all fields in a collection (with examples)
  • Type checking in MongoDB: A practical guide (with examples)
  • How to query an array of subdocuments in MongoDB (with examples)
  • MongoDB: How to compare 2 documents (with examples)