TOC

MongoDB 命令行工具安装

MongoDB 4 之后的版本,也就是 xx 年之后,被各大 Linux 发行版从仓库移除,所以不能直接使用包管理器安装。

# 安装
sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
sudo apt-get install -y mongocli

# 更新
sudo apt-get install --only-upgrade mongocli

# 验证安装
mongocli --version

可以将 MongoDB 的更新源加入系统,我觉得有点麻烦:

  1. 每次 apt update 都要检查这个更新源,影响执行速度
  2. 每次系统升级都要手动修改 source.list 文件,重新启用这个源

如果有的选,我还是更喜欢直接下载安装包。

-> % wget https://downloads.mongodb.com/compass/mongosh.json
-> % cat mongosh.json | jq '[.versions[0].downloads[] | select(.arch == "x86_64" and .distro == "deb")] | first.archive | {url, sha256}' > mongosh-tiny.json

# {
#   "url": "https://downloads.mongodb.com/compass/mongodb-mongosh_2.5.9_amd64.deb",
#   "sha256": "8186240604fa567e041d73a2ff2ede2268b0e89617942c4fa80604f78d01f790"
# }

url=$(cat mongosh-tiny.json | jq -r .url)
sha256=$(cat mongosh-tiny.json | jq -r .sha256)
filename=$(echo $url | awk -F/ '{print $NF}')

# 下载
wget $url
# 验证
if [ "$sha256" = "$(sha256sum $filename | cut -d ' ' -f1)" ]; then echo "验证结果:\033[49;92m通过\033[0m"; else echo "验证结果:\033[49;91m失败\033[0m"; fi;
# 安装
sudo gdebi $filename

mongosh 基本用法回顾

  1. 连接数据库

    mongosh "mongodb://localhost:27017"  # 连接本地
    mongosh "mongodb://user:pass@host:27017/db"  # 带认证
    
  2. 数据库操作

    show dbs                    // 列出所有数据库
    use mydb                    // 切换/创建数据库
    db.dropDatabase()          // 删除当前数据库
    
  3. 集合操作

    show collections           // 显示所有集合
    db.createCollection("users") // 创建集合
    db.users.drop()            // 删除集合
    
  4. 文档 CRUD

    // 插入
    db.users.insertOne({ name: "John", age: 25 });
    db.users.insertMany([{ name: "Alice" }, { name: "Bob" }]);
    
    // 查询
    db.users.find(); // 查询所有
    db.users.findOne({ age: { $gt: 20 } }); // 条件查询
    
    // 更新
    db.users.updateOne({ name: "John" }, { $set: { age: 26 } });
    
    // 删除
    db.users.deleteOne({ name: "John" });
    
  5. 索引管理

    db.users.createIndex({ name: 1 }); // 创建索引
    db.users.getIndexes(); // 查看索引
    
  6. 聚合查询

    db.orders.aggregate([
        { $match: { status: "completed" } },
        { $group: { _id: "$product", total: { $sum: "$amount" } } },
    ]);
    
  7. 实用命令

    rs.status(); // 集群状态
    db.stats(); // 数据库统计
    db.help(); // 查看帮助
    exit; // 退出shell
    

如果你有魔法,你可以看到一个评论框~