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进行降序排序,返回第一条数据

相关推荐
秃头摸鱼侠1 小时前
MySQL查询语句(续)
数据库·mysql
MuYiLuck1 小时前
【redis实战篇】第八天
数据库·redis·缓存
睡觉待开机1 小时前
6. MySQL基本查询
数据库·mysql
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩2 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
Ares-Wang2 小时前
负载均衡LB》》HAproxy
运维·数据库·负载均衡
AI.NET 极客圈2 小时前
.NET 原生驾驭 AI 新基建实战系列(四):Qdrant ── 实时高效的向量搜索利器
数据库·人工智能·.net
weixin_470880263 小时前
MySQL体系架构解析(二):MySQL目录与启动配置全解析
数据库·mysql·面试·mysql体系架构·mysql bin目录