A MongoDB Shell (mongosh) implementation written in Go. Provides a fully interactive JavaScript-based REPL for MongoDB with support for CRUD operations, aggregation, replica sets, sharding, user/role management, and more.
- Interactive REPL with tab completion, multi-line input, and persistent command history
- Full CRUD —
find,findOne,insertOne,insertMany,updateOne,updateMany,deleteOne,deleteMany,replaceOne - Aggregation pipeline —
aggregate,countDocuments,estimatedDocumentCount,distinct - Cursor chaining —
sort,limit,skip,projection,hint,comment,collation,pretty,explain - Find-and-modify —
findOneAndUpdate,findOneAndReplace,findOneAndDelete,findAndModify - Bulk writes —
bulkWrite - Index management —
createIndex,createIndexes,dropIndex,dropIndexes,getIndexes - BSON types —
ObjectId,NumberLong,NumberInt,NumberDecimal,ISODate,UUID,Timestamp,BinData,MinKey,MaxKey - Database admin —
db.stats(),db.runCommand(),db.adminCommand(),db.serverStatus(),db.currentOp(),db.killOp(),db.fsyncLock()/db.fsyncUnlock() - User & role management —
createUser,dropUser,getUsers,grantRolesToUser,createRole,dropRole, and more - Replica set —
rs.status(),rs.conf(),rs.initiate(),rs.add(),rs.remove(),rs.stepDown() - Sharding —
sh.status(),sh.addShard(),sh.enableSharding(),sh.shardCollection(), balancer controls - Shell commands —
show dbs,show collections,show users,use <db>,exit - Eval mode — run a command and exit with
--eval - Cross-platform — builds for Linux, macOS, and Windows (amd64/arm64)
git clone https://github.com/adaptive-scale/go-mongosh.git
cd go-mongosh
make buildThis produces a mongosh binary in the project root.
Download the latest release archive for your platform from the Releases page and extract the mongosh binary.
# Connect to localhost:27017 (default)
mongosh
# Connect with a URI
mongosh mongodb://localhost:27017/mydb
# Connect to a specific host and port
mongosh --host myhost --port 27018
# Authenticate
mongosh -u admin -p
mongosh -u admin -p secret --authenticationDatabase admin
# Evaluate a command and exit
mongosh --eval 'db.stats()'
# Suppress the startup banner
mongosh --quiet
# Show version
mongosh --version// Switch database
use mydb
// List collections
show collections
db.getCollectionNames()
// Insert documents
db.users.insertOne({ name: "Alice", age: 30 })
db.users.insertMany([{ name: "Bob" }, { name: "Charlie" }])
// Query
db.users.find({ age: { $gte: 25 } }).sort({ name: 1 }).limit(10)
db.users.findOne({ name: "Alice" })
// Update
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
db.users.updateMany({}, { $inc: { age: 1 } })
// Delete
db.users.deleteOne({ name: "Bob" })
db.users.deleteMany({ status: "inactive" })
// Aggregation
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])
// Indexes
db.users.createIndex({ email: 1 }, { unique: true })
db.users.getIndexes()
// Explain a query
db.users.find({ age: { $gt: 25 } }).explain("executionStats")
// Database admin
db.stats()
db.serverStatus()
db.currentOp()
// Replica set
rs.status()
rs.conf()
// Sharding
sh.status()make build # Build for the current platform
make test # Run unit tests
make e2e # Run end-to-end tests (requires a running MongoDB instance)
make release # Cross-compile for all platforms (linux/darwin/windows, amd64/arm64)
make clean # Remove build artifacts
make gh-release # Create a GitHub release with artifacts (requires gh CLI)cmd/mongosh/ CLI entry point and flag parsing
internal/
mongoclient/ MongoDB driver client wrapper
jsruntime/ Goja JavaScript runtime setup and global functions
repl/ Interactive REPL with history and tab completion
shell/ db, rs, and sh objects with collection/cursor support
types/ BSON type constructors (ObjectId, ISODate, etc.)
convert/ Bidirectional JS <-> Go/BSON value conversion
output/ mongosh-style output formatting
tests/ End-to-end shell test scripts
- goja — JavaScript runtime in Go
- mongo-driver v2 — Official MongoDB Go driver
- liner — Line editing for the REPL
- x/term — Terminal utilities for password prompts
See LICENSE for details.