Linux 环境“从零”部署 MongoDB 6.0:mongosh 安装与数据操作全攻略

前提

完成linux平台部署MongoDB【部署教程】且完成mongosh的安装

由于本人使用的是6.0版本的MongoDB,新版本 MongoDB(尤其是 6.0 及以上版本)已经不再默认捆绑传统的 mongo shell,而改用新的 MongoDB Shell(mongosh)。

但有时即便是 mongosh,也需要单独下载和安装,而不会直接出现在 bin 目录下。

本人该版本是没有mongosh的,故自己安装实现的,步骤如下:

mongosh 命令行下载

bash 复制代码
#下载命令行工具 mongosh
wget https://downloads.mongodb.com/compass/mongosh-2.0.1-linux-x64.tgz
#解压命令行mongosh工具
tar -zxf mongosh-2.0.1-linux-x64.tgz -C /opt/module/mongodb_demo/mongodb/standalone
cd /opt/module/mongodb_demo/mongodb/standalone/mongosh-2.0.1-linux-x64/bin 
cp mongosh /usr/local/bin/  #复制到全局变量中,这样就可以任意位置运行mongosh

配置好后启动好mongodb后运行mongosh命令

出现以上显示 就成功啦!

接下来就介绍相关操作命令嘞


1.创建数据库mydb,并给指定的集合添加文档

bash 复制代码
use mydb #使用mydb数据库
db.createCollection("xxx") #自定义集合名称

(1)用insert()向集合中添加:_id为1001,姓名为张三,年龄为20的文档。

(2)用insert()向集合中添加:姓名为赵四,年龄为40岁的文档。

(3)用save()向集合中添加:姓名为赵四,年龄为20岁的文档。

在 MongoDB 4.x 版本及以后的版本中,save() 方法已经被弃用,取而代之的是 insertOne()insertMany() 方法。原本save重复插入文档会自动更新,insert重复插入会报错

当使用save()方法时,会报错 TypeError: db.wurui.save is not a function

(4)查询各自集合中的内容。-->find()函数

(5)用insert()向集合中添加:_id为1001,姓名为李白,年龄为30的文档。

(6)用save()向集合中添加:_id为1001,姓名为李白,年龄为30的文档。改为insertOne()

2.查找文档

(1).查找集合中姓名为赵四的文档。

(2).查找集合中姓名为赵四,年龄为40的文档。

(3).使用命令查找集合的第一条记录。

bash 复制代码
db.wurui.findOne()

(4).查询集合中的所有内容。

3.删除文档

(1).使用命令删除集合中姓名为赵四的文档。

(2).删除集合中所有文档。

4.更新数据库

(1)数据准备,新建user集合并插入以下内容:

  1. 将users集合中姓名为方世玉的名字修改为洪七公,college改为安理工。
bash 复制代码
db.users.update (
  { name: "方世玉" },
  { $set: { name: "洪七公", college: "安理工" } }
)

2.将年龄为32岁的所有记录的college改为清华大学。

5.使用mongodb的MapReduce函数

(1)考虑以下文档结构存储用户的文章,文档存储了用户的 user_name 和文章的 status 字段:

>db.XXX.insert({

"post_text": "纸上得来终觉浅,绝知此事要躬行。",

"user_name": "Jerry",

"status":"active"

})

>db.XXX.insert({

"post_text": "读书不觉已春深,一寸光阴一寸金。",

"user_name": "Jerry",

"status":"active"

})

>db.XXX.insert({

"post_text": "天生我材必有用,千金散尽还复来。",

"user_name": "Jerry",

"status":"active"

})

>db.XXX.insert({

"post_text": "世上无难事,只怕不专心。",

"user_name": "Jerry",

"status":"active"

})

>db.XXX.insert({

"post_text": "穷则独善其身,达则兼济天下。",

"user_name": "Jerry",

"status":"disabled"

})

>db.XXX.insert({

"post_text": "博学之,审问之,慎思之,明辨之,笃行之。",

"user_name": "Tom",

"status":"disabled"

})

>db.XXX.insert({

"post_text": "路漫漫其修远兮,吾将上下而求索。",

"user_name": "Tom",

"status":"disabled"

})

>db.XXX.insert({

"post_text": "夫君子之行,静以修身,俭以养德。",

"user_name": "Tom",

"status":"active"

})

(2)在XXX集合中使用 mapReduce 函数来选取已发布的文章(status:"active"),并通过user_name分组,计算每个用户的文章数。

(3)使用 find 操作符来查看 mapReduce 的查询结果。

(4)使用aggregate()计算每个用户的文章数。

6.使用管道操作符

  1. 建立文档:

订单表:

db.order.insert({"order_id":"1","uid":10,"trade_no":"111","all_price":100,"all_num":2})

db.order.insert({"order_id":"2","uid":7,"trade_no":"222","all_price":90,"all_num":2})

db.order.insert({"order_id":"3","uid":9,"trade_no":"333","all_price":20,"all_num":6})

订单商品表:

db.order_item.insert({"order_id":"1","title":"商品鼠标1","price":50,num:1})

db.order_item.insert({"order_id":"1","title":"商品键盘 2","price":50,num:1})

db.order_item.insert({"order_id":"1","title":"商品键盘 3","price":0,num:1})

db.order_item.insert({"order_id":"2","title":"牛奶","price":50,num:1})

db.order_item.insert({"order_id":"2","title":"酸奶","price":40,num:1})

db.order_item.insert({"order_id":"3","title":"矿泉水","price":2,num:5})

db.order_item.insert({"order_id":"3","title":"毛巾","price":10,num:1})

(1)要求查找集合order中的数据,只返回文档中trade_no和all_price字段。

bash 复制代码
db.order.aggregate([
... {$project:{_id:0,trade_no:1,all_price:1}}])

(2)要求查找集合order中的数据,只返回文档中trade_no和all_price字段,且过滤掉all_price小于90的数据。

bash 复制代码
db.order.aggregate([{$match:{all_price:{$gte:90}}},{$project:{_id:0,trade_no:1,all_price:1}}])

(3)统计每个订单下的商品总数量,按照订单号分组。

(4)要求查找集合order中的数据,只返回文档中trade_no和all_price字段,且过滤掉all_price小于90的数据,最后按照all_price进行降序排序,返回第一条数据

相关推荐
科技小花3 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸3 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain3 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希3 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神3 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员3 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java4 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿4 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴4 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU4 小时前
三大范式和E-R图
数据库