MongoDB(一):CentOS7离线安装MongoDB单机版与简单使用

news2024/10/6 4:01:41

CentOS7离线安装MongoDB单机版与简单使用

  • 1、概述
  • 2、安装社区版
    • 2.1、前置条件
    • 2.2、下载.tgz文件
    • 2.3、解压文件
    • 2.4、安装MongoDB Shell
  • 3、运行MongoDB服务端
    • 3.1、关于ulimit
    • 3.2、目录设置
    • 3.3、创建mongod.conf
    • 3.4、运行MongoDB
    • 3.5、检查MongoDB是否已运行
  • 4、使用MongoDB
    • 4.1、操作数据库
      • 4.1.1、显示当前数据库
      • 4.1.2、显示所有数据库
      • 4.1.3、切换到其他数据库
    • 4.2、对集合的操作
      • 4.2.1、显示数据库中所有集合
      • 4.2.2、创建集合
      • 4.2.3、删除集合
      • 4.2.3、集合改名
    • 4.3、对文档的操作
      • 4.3.1、插入文档
      • 4.3.2、查询文档
      • 4.3.3、更新文档
      • 4.3.4、删除文档
  • 5、总结

1、概述

大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。
由于服务器处于内网去,所有本篇介绍使用.tgz包安装MongoDB的服务端,尽管使用.tgz包可以完成MongoDB服务端的安装,但是官方依然推荐使用yum包管理器来进行安装,因为yum包管理器会自动安装所需要的依赖,并且还会提供一个名为mongod.conf的示例文件,方便将来升级及维护工作,使用.tgz安装的话,该文件需要自行创建。使用.tgz安装服务端后,还需要单独安装 mongosh,在没有GUI连接工具的情况下,可以通过mongosh命令行连接MongoDB服务端。

2、安装社区版

2.1、前置条件

MongoDB依赖libcurl、openssl、xz-libs这几个包,请确保机器上已经安装这些包,可以使用下面的命令检查相关依赖是否已安装,比如下面的命令查询openssl是否已安装:

rpm -qa|grep openssl

如果已安装的话,会有内容返回:

openssl-1.0.2k-21.el7_9.x86_64
openssl-static-1.0.2k-21.el7_9.x86_64
openssl-devel-1.0.2k-21.el7_9.x86_64
openssl-libs-1.0.2k-21.el7_9.x86_64

2.2、下载.tgz文件

根据操作系统选择不合适的版本进行下载,这里已下面的版本为例进行安装:

mongodb-linux-x86_64-rhel70-7.0.2.tgz

2.3、解压文件

解压文件到指定目录,

tar -zxvf mongodb-linux-x86_64-rhel70-7.0.2.tgz -C /path/to/destination

这里暂时先不降MongoDB的二进制命令配置到系统的PATH中,如果需要找二进制命令的话直接到安装目录去找即可。

2.4、安装MongoDB Shell

作为一个追求使用命令行的少年,哪能错过使用命令行的快乐,所以mongosh必须要装啊,这里也下载的.tgz包:

mongosh-2.0.2-linux-x64.tgz

同样,将其解压到指定目录:

tar -zxvf mongosh-2.0.2-linux-x64.tgz -C /path/to/destination

在解压目录的bin目录下,可以看到mongosh命令:

-rwxr-xr-x 1 root root 111667760 Oct 14 20:23 mongosh
-rwxr-xr-x 1 root root 107165512 Oct 14 20:23 mongosh_crypt_v1.so

不过别着急用,因为MongoDB的server还没启动。

3、运行MongoDB服务端

3.1、关于ulimit

大多数类Unix操作系统限制进程可以使用的系统资源。这些限制可能会对MongoDB的运行产生负面影响,因此应进行调整,这里可以所搜下UNIX ulimit设置,根据实际情况设置合适的值,测试时设置为了1024000。

3.2、目录设置

跟很多服务一样,MongoDB运行时也会产生数据和日志,数据和日志会存储在默认的位置,这里不打算使用默认目录, 分别为数据和日志创建目录:

/path/to/data
/path/to/log

创建mongod用户及mongod用户组,把数据目录和日志目录的所有者和所属组设置为刚刚创建的用户和用户组。

chown -R mongod:mongod /path/to/data
chown -R mongod:mongod /path/to/log

3.3、创建mongod.conf

先配置下面几个配置项吧,

dbpath=/path/to/data
logpath=/path/to/log/mongodb.log
port=27017
fork=true

dbpath指定了数据目录的存储位置,logpath指定了日志文件的存储位置,注意需要指定到文件,否则启动会报错,port指定运行时占用的端口,可以根据情况调整,fork为true指明以后台方式启动。

3.4、运行MongoDB

使用MongoDB安装目录下的mongod命令,并使用–config或-f指定配置文件,即可启动MongoDB服务。

[root@xxx bin]#  ./mongod -f  /path/to/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 80863
child process started successfully, parent exiting

3.5、检查MongoDB是否已运行

可以使用检查端口号的形式检查MongoDB是否已运行。

[root@xxx bin]# netstat -tunlp|grep 27017
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      977415/./bin/mongod

4、使用MongoDB

之前的操作中已将安装了mongosh,此时只要执行该命令就会默认连接本机的MongoDB服务(以默认端口连接),并进入到test数据库:

[root@hadoop104 bin]# ./mongosh
Current Mongosh Log ID: 6538cf151bec061745212a9b
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.0.2

Using MongoDB:          7.0.2
Using Mongosh:          2.0.2

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2023-10-25T16:17:10.127+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
   2023-10-25T16:17:10.127+08:00: You are running this process as the root user, which is not recommended
   2023-10-25T16:17:10.127+08:00: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
   2023-10-25T16:17:10.130+08:00: You are running on a NUMA machine. We suggest launching mongod like this to avoid performance problems: numactl --interleave=all mongod [other options]
   2023-10-25T16:17:10.130+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
   2023-10-25T16:17:10.131+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
   2023-10-25T16:17:10.131+08:00: vm.max_map_count is too low
------


Deprecation warnings:
  - Using mongosh on the current operating system is deprecated, and support may be removed in a future release.
See https://www.mongodb.com/docs/mongodb-shell/install/#supported-operating-systems for documentation on supported platforms.
test>

4.1、操作数据库

4.1.1、显示当前数据库

显示当前数据库:

test> db
test

这将显示当前选定的数据库。

4.1.2、显示所有数据库

显示所有数据库:

test> show dbs
admin   40.00 KiB
config  72.00 KiB
local   72.00 KiB
test    72.00 KiB
test>

这将显示服务器上的所有数据库。

4.1.3、切换到其他数据库

注意下面的命令在切换数据库时,如果数据库不存在,则会创建数据库,否则切换到指定数据库:

use <database_name>

将 <database_name> 替换为您要切换到的数据库名称。如果该数据库不存在,MongoDB 将在您首次向其写入数据时创建该数据库。
MongoDB中数据库的概念与关系型数据库中数据库的概念基本一致。

4.2、对集合的操作

4.2.1、显示数据库中所有集合

集合存在于MongoDB的单个数据库中,它等效于关系型数据库中的表。使用下面三种方式都可以查询数据库中的所有集合:

test> show collections
liCollection
test>

test> show tables
liCollection
test>

test> db.getCollectionNames()
[ 'liCollection' ]
test>

4.2.2、创建集合

使用use命令切换到要创建集合的数据库,使用db.createCollection()命令创建集合,要创建的集合的名称作为参数,例如如下命令创建了一个名为myCollection的集合:

test> db.createCollection("myCollection")
{ ok: 1 }
test>

注意:如果在向集合中插入文档时,假如集合并不存在,那么将自动创建该集合,下面的命令向myCollectionOne集合插入一条数据,但是集合并未事先创建,执行插入操作时集合myCollectionOne将会被自动创建:

test> db.myCollectionOne.insertOne({name:"Jhone", age:23})
{
  acknowledged: true,
  insertedId: ObjectId("654ed4c0fba0f2e5ddf52464")
}
test>

4.2.3、删除集合

删除集合,可以使用db.yourCollectionName.drop()命令,下面是删除集合的示例:

test> db.liCollection.drop()
true
test>

如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。请注意,集合删除是一个不可逆的操作,一旦删除,其中的数据将无法恢复。

4.2.3、集合改名

MongoDB中,可以使用 db.collection.renameCollection() 命令来给集合改名:

test> db.myCollectionOne.renameCollection("newMyCollection")
{ ok: 1 }
test>

4.3、对文档的操作

MongoDB中文档一词源于document,文档的数据结构和JSON基本一致,所有存储在集合中的数据都是BSON格式,

4.3.1、插入文档

使用db.yourCollectionName.insertOne()方法插入单个文档:

test> db.newMyCollection.insertOne({name:"Jhone", age:23})
{
  acknowledged: true,
  insertedId: ObjectId("654eddadfba0f2e5ddf52465")
}

使用db.yourCollectioinName.insertMany()方法插入多个文档:

test> db.newMyCollection.insertMany([{name:"Jhone", age:21},{name:"Peter", age:20}])
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("654ede7efba0f2e5ddf52467"),
    '1': ObjectId("654ede7efba0f2e5ddf52468")
  }
}

4.3.2、查询文档

使用db.yourCollectionName.find()方法查询集合中的文档:

test> db.newMyCollection.find()
[
  { _id: ObjectId("654ed4c0fba0f2e5ddf52464"), name: 'Jhone', age: 23 },
  { _id: ObjectId("654eddadfba0f2e5ddf52465"), name: 'Jhone', age: 23 },
  { _id: ObjectId("654ede65fba0f2e5ddf52466"), name: 'Jhone', age: 21 },
  { _id: ObjectId("654ede7efba0f2e5ddf52467"), name: 'Jhone', age: 21 },
  { _id: ObjectId("654ede7efba0f2e5ddf52468"), name: 'Peter', age: 20 }
]

该方法会显示集合中的所有文档。
如果要查询单个文档,可以使用db.yourCollectionName.findOne()方法:

test> db.newMyCollection.findOne()
{ _id: ObjectId("654ed4c0fba0f2e5ddf52464"), name: 'Jhone', age: 23 }
test>

4.3.3、更新文档

使用db.yourCollectionName.updateOne()方法更新单个文档,例如下面的命令将名字为Jhone的文档中的age更新为34:
test> db.newMyCollection.updateOne({name:“Jhone”},{$set:{age:34}})
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
db.yourCollectionName.updateMany()方法更新符合条件的多个文档:

test> db.newMyCollection.updateMany({name:"Jhone"}, {$set:{age:34}})
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 4,
  modifiedCount: 3,
  upsertedCount: 0
}
test> db.newMyCollection.find()
[
  { _id: ObjectId("654ed4c0fba0f2e5ddf52464"), name: 'Jhone', age: 34 },
  { _id: ObjectId("654eddadfba0f2e5ddf52465"), name: 'Jhone', age: 34 },
  { _id: ObjectId("654ede65fba0f2e5ddf52466"), name: 'Jhone', age: 34 },
  { _id: ObjectId("654ede7efba0f2e5ddf52467"), name: 'Jhone', age: 34 },
  { _id: ObjectId("654ede7efba0f2e5ddf52468"), name: 'Peter', age: 20 }
]

4.3.4、删除文档

使用 db.yourCollectionName.deleteOne() 方法删除单个文档:

test> db.newMyCollection.deleteOne({name:"Jhone"})
{ acknowledged: true, deletedCount: 1 }
test>

使用使用 db.yourCollectionName.deleteMany() 方法删除符合条件的多个文档:

test> db.newMyCollection.deleteMany({name:"Jhone"})
{ acknowledged: true, deletedCount: 3 }
test>

5、总结

以上就是MongoDB的单机安装与简单使用,高阶内容敬请期待。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。
这一篇是在酒店所写,写了几个小时终于写完,好畅快:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Clear recent project list 清理Idea的最近项目列表

Clear recent project list 清理Idea的最近项目列表 Idea打开过好多项目清理方式mac文件地址Windows文件地址linux 文件地址 Idea打开过好多项目 很多项目都已经从磁盘删除了&#xff0c;但是还在最近的项目中能看到&#xff0c;偶尔点击到&#xff0c;会提示已经不存在。很头…

webstorm基础配置

设置左侧菜单栏文字大小 开启鼠标滚轮控制文字大小 配置自定义注释 设置左侧菜单栏文字大小&#xff1a;file》settings》Appearance&Behavior》Appearance 开启鼠标滚轮控制主界面文字大小&#xff1a;file》settings》Editor》General 配置自定义注释&#xff1a;fi…

【文件包含】phpmyadmin 文件包含(CVE-2014-8959)

1.1漏洞描述 漏洞编号CVE-2014-8959漏洞类型文件包含漏洞等级高危漏洞环境Windows漏洞名称phpmyadmin 文件包含&#xff08;CVE-2014-8959&#xff09; 描述: phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑&#xff0c;通过二次编…

一键将CSDN博客文章如何转为Markdown

文章目录 1.在CSDN博文页面点击右键&#xff0c;选择“检查”&#xff08;Google浏览器为例&#xff09;。2.在查看器中搜索article_content&#xff0c;找到对应内容&#xff0c;点击…复制为outerHTML。3.打开网址https://tool.lu/markdown/&#xff0c;点击HTML2MD&#xff…

【数据结构】希尔排序(最小增量排序)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

【C++面向对象】11. 数据抽象*

文章目录 【 1. 访问标签强制抽象 】【 2. 设计策略 】 数据抽象 是指只向外界提供关键信息&#xff0c;并隐藏其后台的实现细节&#xff0c;即只表现必要的信息而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程&#xff08;设计&#xff09;技术。数据抽象的好处&…

【面试经典150 | 位运算】数字范围按位与

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;公共前缀方法二&#xff1a;n & (n-1) 写在最后 Tag 【位运算】 题目来源 201. 数字范围按位与 题目解读 计算给定区间内所有整数的按位与的结果。 解题思路 本题朴素的方法是直接将区间内的所有整数按位与&…

FindMy技术定位身份证

身份证是我们日常生活中不可缺少的重要证件。无论是购买房产、车辆&#xff0c;还是乘坐飞机、火车、汽车等交通工具&#xff0c;甚至是办理银行业务等&#xff0c;都需要提供身份证原件。因此&#xff0c;身份证对于我们来说&#xff0c;其重要性不言而喻&#xff0c;一旦丢失…

Python如何使用Pyecharts+TextRank生成词云图?

Python如何使用PyechartsTextRank生成词云图&#xff1f; 1 应用场景2 关于Pyecharts2.1 Pyecharts简介2.2 Pyecharts安装2.3 Pyecharts支持的图形2.4 Pyecharts的一个示例 3 关于TextRank3.1 TextRank简介3.2 TextRank安装 4 词云图的生成过程4.1 导入需要的包4.2 目标文件4.3…

2023.11.16 hivesql之条件函数,case when then

目录 一.Conditional Functions条件函数 二.空值相关函数 三&#xff1a;使用注意事项 3.1 then后面不能接子查询 3.2 then后面只能是结果值 3.3 then后面能不能接两列 四.用于建表新增字段使用场景 一.Conditional Functions条件函数 -- 演示条件函数 -- if(条件判断,t…

【软考篇】中级软件设计师 第三部分(一)

中级软件设计师 第三部分&#xff08;一&#xff09; 十七. I/O管理软件十八. 输入/输出技术十九. 总线系统二十. 磁盘管理20.1 移臂调度算法20.2 缓冲区 二十一. 操作系统二十二. 数据库22.1 三级模式-两级映射22.2 数据库设计22.3 规范化理论22.4 范式判断22.5 模式分解 十七…

探索arkui(1)--- 布局(线性/层叠/弹性)

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中&#xff0c;开发人员通常会展示新网站或应用程序的设计、功能和用户体验&#xff0c;并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件&#xff0c;吸…

如何用SaleSmartly集成WhatsApp账号(内含WhatsApp个人号、商业号、API号对比图)

用SaleSmartly集成WhatsApp账号 如果企业有多个WhatsApp账号&#xff0c;无论是个人账号还是工作账号&#xff0c;员工操作起来可能会觉得难以管理和切换。SaleSmartly就可以解决这个问题&#xff0c;让员工在一个平台上同时使用多个WhatsApp账号&#xff0c;不需要频繁地登录和…

C++初阶,详解类和对象(2)

详解类和对象&#xff08;2&#xff09; 一&#xff0c;前言二&#xff0c;构造函数2.1构造函数概念2.2构造函数特性 三&#xff0c;析构函数3.1析构函数概念3.2析构函数特性 一&#xff0c;前言 上一篇我们讲了类的大体框架&#xff0c;这篇内容我们要重点来说一说类的几个默…

iis特殊字符的轉義問題解決

今天發現有個問題&#xff0c;部分圖片的靜態資源帶有號&#xff0c;導致無法直接在瀏覽器獲取圖片&#xff0c;百度了一下&#xff0c;修改了注冊表&#xff0c;發現沒什麽軟用&#xff0c;最後找到一篇博客&#xff0c;解決了 解決

k8s的error: metrics not available yet问题处理

kubectl top node报错处理 解决步骤环境说明问题现象初次排查问题解决版本兼容性metric-server.yaml 问题验证 解决步骤 因项目要求&#xff0c;需在k8s集群中使用 kubectl top node命令&#xff0c;但是一直报error: metrics not available yet错误。为了更好的复现问题&…

【知识增强】A Survey of Knowledge-Enhanced Pre-trained LM 论文笔记

A Survey of Knowledge-Enhanced Pre-trained Language Models Linmei Hu, Zeyi Liu, Ziwang Zhao, Lei Hou, Liqiang Nie, Senior Member, IEEE and Juanzi Li 2023年8月的一篇关于知识增强预训练模型的文献综述 论文思维导图 思维导图网页上看不清的话&#xff0c;可以存…

如果使用Vue要做根据已有的图形填入到指定的单元格中,你会怎么做?

这里写自定义目录标题 如果使用Vue要做根据已有的图形填入到指定的单元格中&#xff0c;你会怎么做&#xff1f;先看效果图上代码 如果使用Vue要做根据已有的图形填入到指定的单元格中&#xff0c;你会怎么做&#xff1f; 先看效果图 上代码 <template><div class&q…

算法--搜索与图

这里写目录标题 主要内容DFS思想 BFS思想 DFS与BFS的比较一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 主要内容 DFS 思想 会优先向深处搜索 一旦到达最深处 那么会回溯 但是在回溯的过程中 会边回溯边观察是否有能继…

Springboot项目返回数据统一封装

Springboot项目返回数据统一封装,支持swagger。 正常swagger会根据数据库表的注释显示对应的参数释义等。但当我们使用统一接口返回map时&#xff0c;部分注释等信息会被掩盖消失。在此提供三个java类即可满足统一封装返回接口&#xff0c;也可显示对应的swagger释义等。 1.Er…