Thanks to visit codestin.com
Credit goes to github.com

Skip to content

A modern Rust-based MongoDB shell delivering faster startup, safer commands, and a clean, developer-friendly CLI experience.

License

Notifications You must be signed in to change notification settings

daleione/mongosh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

56 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Rust MongoDB Power CLI

Crates.io Rust License: MIT

A power-user oriented MongoDB CLI written in Rust, focused on productivity, scripting, and rich output.

Note: This project is an independent, community-driven tool. It is NOT affiliated with MongoDB, and it is not intended to be a drop-in replacement for the official mongosh.


✨ Why Another MongoDB CLI?

The official MongoDB Shell (mongosh) is excellent for compatibility and JavaScript workflows. This project exists for engineers who want a faster, more scriptable, and CLI-native experience:

  • 🧠 Power-user workflows β€” Batch queries, automation, CI/CD
  • πŸ“Š Readable output β€” Tables, highlighted JSON
  • ⚑ Fast startup & execution β€” Compiled Rust binary
  • 🧩 Extensible architecture β€” Plugins & future extensions

If you rely heavily on JavaScript execution inside the shell, you should continue using the official mongosh.


πŸ” Key Differences vs Official mongosh

Feature Official mongosh This Project
Implementation Node.js Rust (async)
JS Runtime Full JavaScript ❌ Not a JS shell
Startup Time Slower Fast
Output JSON-first Tables + highlighted JSON
Scripting JS-based CLI / batch-oriented
Target Users General users Power users / DevOps

🚧 Project Status

⚠️ Active Development – Not Production Ready

  • APIs and commands may change
  • Some MongoDB features are incomplete
  • Bugs and panics may exist

Feedback, testing, and contributions are highly welcome.


✨ Features

  • ⚑ High Performance β€” Native Rust, async I/O
  • πŸ’Ύ Lightweight β€” Small static binary
  • πŸ”’ Type Safety β€” Memory-safe by design
  • 🧡 Async Execution β€” Powered by Tokio
  • 🎨 Syntax Highlighting β€” Readable command & JSON output
  • 🧠 Smart Completion β€” Context-aware auto-completion
  • πŸ“Š Rich Output β€” Table & structured views (WIP)
  • πŸ”Œ Extensible β€” Plugin-friendly design
  • 🌍 Cross-Platform β€” Linux, macOS, Windows

πŸ“¦ Installation

cargo install mongosh

Note: The binary name may change in the future to avoid conflicts with the official MongoDB shell.


πŸš€ Quick Start

Connect to MongoDB

# Connect to local MongoDB
mongosh

# Connect to a specific host
mongosh mongodb://localhost:27017

# Connect with authentication
mongosh mongodb://username:password@localhost:27017/dbname

πŸ§ͺ Example Commands

Show Databases

show dbs

Switch Database

use mydb

Show Collections

show collections

Insert a Document

db.users.insertOne({ name: "John Doe", age: 25 });

Query Documents

db.users.find({ age: { $gte: 18 } });

Update Documents

db.users.updateOne({ name: "John Doe" }, { $set: { age: 26 } });

Aggregation Pipeline

db.orders.aggregate([
  { $match: { status: "completed" } },
  { $group: { _id: "$userId", total: { $sum: "$amount" } } },
]);

πŸ” SQL Query Support

This shell now supports SQL SELECT queries that are automatically translated to MongoDB queries!

Basic SELECT Queries

-- Simple query with filtering and sorting
SELECT name, age FROM users WHERE age > 18 ORDER BY name ASC

-- Pagination with LIMIT and OFFSET
SELECT * FROM users LIMIT 10 OFFSET 5

Aggregate Functions

-- Column aliases support both identifiers and quoted strings
SELECT group_id AS 'group_id', COUNT(*) FROM templates GROUP BY group_id

-- Group by with multiple aggregates
SELECT
  category,
  COUNT(*) AS total,
  SUM(price) AS revenue
FROM products
GROUP BY category

Supported SQL Features

  • βœ… SELECT with column list or *
  • βœ… FROM clause
  • βœ… WHERE with comparison operators (=, !=, >, <, >=, <=)
  • βœ… Logical operators (AND, OR)
  • βœ… GROUP BY with aggregation functions (COUNT, SUM, AVG, MIN, MAX)
  • βœ… ORDER BY with ASC/DESC
  • βœ… LIMIT and OFFSET
  • βœ… Column aliases with AS (supports both identifiers and string literals)

SQL to MongoDB Translation Examples

SQL MongoDB
SELECT * FROM users db.users.find({})
SELECT name, age FROM users db.users.find({}, {name: 1, age: 1})
WHERE age > 18 {age: {$gt: 18}}
WHERE status = 'active' AND age >= 18 {$and: [{status: 'active'}, {age: {$gte: 18}}]}
ORDER BY name ASC {name: 1}
LIMIT 10 limit(10)
GROUP BY category aggregate([{$group: {_id: "$category"}}])
SELECT COUNT(*) FROM users aggregate([{$group: {_id: null, COUNT_*: {$sum: 1}}}])

Notes

  • SQL queries are automatically detected when starting with SELECT
  • Complex JOIN operations are not yet supported
  • Subqueries are not yet supported

πŸ“„ License

Licensed under the MIT License.


🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

πŸ“¬ Feedback

If you have any questions, suggestions, or issues, please open an issue on GitHub.

About

A modern Rust-based MongoDB shell delivering faster startup, safer commands, and a clean, developer-friendly CLI experience.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages