MongoDB概述与部署

Posted 礁之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB概述与部署相关的知识,希望对你有一定的参考价值。

一、MongoDB概述

(1)MongoDB简介

  • 概述:MongoDB是由C++语言编写的,是一个基于分布式文件存储的非关系型数据库。MongoDB又被称为最像关系型数据库的非关系性数据库

  • 优势:MongoDB的优势在于可以存放海量数据,具备强大的查询功能,是一个独立的、面向集合文档形式的数据库

  • Mysql和MongoDB数据存储格式的对比:

mysql数据库—数据表—数据—行—列—表联合—主键
MongoDB数据库—集合—文档—字段—嵌入文档—主键(MongDB的主键为_id)
  • MongoDB官网:https://www.mongodb.com/try/download/community

(2)MongoDB特点

  • 存储性:
  1. 面向集合(Collection-Oriented): 数据被分组存储在数据集中,这个数据集被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含多个的文档。集合的的概念就类似于关系型数据中的表,不同的是集合不需要定义任何模式
  2. 面向文档: 存储在集合中的文档,被存储为key-values键对值的形式。键用于唯一标识一个文档,为字符串类型,而值可以是各种的文件类型。这种存储形式又被称为BSON(Binary Serialized Document Format)
  3. 高效二进制数据存储: 包括大型对象,例如视频,MongoDB使用二进制格式存储数据,可以保存任何类型的数据对象
  • 操作性:
  1. 完全索引: 可以在任意属性上建立索引,包含内部对象,建立索引后可以提高用户查询速度
  2. 强大的聚合工具: MongoDB除了提供丰富的查询功能外,还提供强大的聚合工具,比如count、group等,支持使用MapReduce完成复杂的聚合任务
  3. 支持Perl、PHP、Java、Python等现在主流开发语言的驱动程序: MongoDB提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程,实现访问MongoDB数据库
  • 可用性:
  1. 支持复制和数据恢复: MongoDB支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能,而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失,和Mysql的主从复制一样,但不同的是MongoDB数据库的主从复制主挂了从会代替主
  2. 自动处理分片: MongoDB支持集群自动切分数据,也就是分布式,对数据进行分片可以使集群存储更多的数据,实现更大的负载,也可以保证存储的负载均衡

(3)MongoDB的适用场景

  1. 网站数据: MongoDB非常适合实时的插入、更新、查询,并且具备了网站实时数据存储的要求,例如数据复制以及高度伸缩性
  2. 缓存: 由于性能很高,MongoDB也适合作为信息基础设施的缓存层,在系统重启之后,由MongoDB搭建的持久化缓存可以避免下层的数据源过载,MongoDB会尽可能的把数据放到内存中,虽然磁盘中也有数据,但还是会全部读取到内存中
  3. 密度高、价值低的数据: 使用传统的关系型数据库在存储一些数据时可能会比较贵,在此之前很多程序员往往会选择传统的文件进行存储
  4. 高伸缩性的场景: MongoDB非常适合由数十或数百台服务器组成的数据库,也就是支持横向扩展
  5. 用于对象以及JSON数据的存储: MongoDB的BSON数据格式非常适合文档格式的存储以及查询

(4)MongoDB的非适用场景

  1. 高度事务性的系统: 例如银行或者会计系统,MongoDB是不支持事务的
  2. 传统的商业智能应用: 针对特定问题的数据库会产生高度优化的查询方式,对于此类应用,数据仓库可能才是更适合的选择
  3. 需要SQL的场景: MongoDB是非关系数据库,不支持SQL

(5)MongoDB的存储结构

  • 逻辑结构:

数据库(database): 数据库是由多个集合组成的,MongoDB默认有四个数据库,分别是config、local、admin、test。一般来说会把多个逻辑相近的集合都放在一个数据库,但是处于性能或者数据量的关系,也可能进行拆分

集合(collection): 集合是由多个文档组成的,相当于Mysql中的表,但是不同于Mysql的表,集合是没有固定结构的

文档(document): 文档是MongoDB的核心概念,也是逻辑存储的最小单元,相当于Mysql中的数据,有点类似于Python中字典的格式,键:值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGohbGFo-1640224445909)(F:\\个人文档\\markdown图片\\image-20210611094154247.png)]

集合名称=key1:value1,key2:value2… 里面的就是文档

  • 物理结构:
  1. 命令空间(后缀为.WT的文件): 每个表或者索引都对应一个命名空间后缀名为.WT,命名空间存储了分配和正在使用的磁盘空间,在mongodb 3.0版本以前,命令空间是.ns的文件,但是在3.0版本之后,默认的存储引擎已经改变,成为WT(wiredTiger)存储引擎,没有以前的.ns文件,都变成了.WT文件
  2. 数据文件: 存放数据的实体,并且使用预分配空间机制,数据文件是以(0,1,2,3…)结尾的,并且后面的文件的大小是前一个文件的两倍

————————————————注释————————————————

预分配空间机制: MongoDB在当前数据文件的基础上,会预分配文件,用0进行填充,数据文件每次新生成的文件的大小都会是上一个文件的两倍,这样可以保证数据文件既不浪费由保证了可用性

——————————————————————————————————

  1. 日志文件: 日志文件分为系统日志文件、journal日志文件、oplog复制操作日志文件、慢查询日志

————————————————注释—————————————————

journal日志文件: 用于MongoDB崩溃恢复的保障

oplog复制操作日志文件: 相当于Mysql中的binary log二进制文件

**慢查询日志:**记录着查询操作超过超时时间的命令

WiredTiger引擎: 也就是WT引擎,是MongoDB3.0版本之后新增的引擎,官方宣称在read、insert和复杂的update下有更高的性能。可以支撑更好的读写负载和并发量,因为对于production(生产)环境,更多的CPU可以有效提升WT引擎的性能,因为WT引擎的IO读写是多线程的。WT不像MMAPV1引擎那样会尽可能的耗尽内存,WT可以通过主配置文件中的cacheSizeGB参数来指定WT引擎使用的内存量

journal日志: journal是一个预写事务日志,是用来确保数据的持久性的,WT引擎每隔60秒(默认的)或者在写入的数据达到2G时,mongoDB将对journal文件提交一个checkpoint检测点,提交检测点后,MongoDB会将内存中的数据变更flush(刷新)到磁盘中的数据文件中,并且做一个标记点,表示标记点之前的数据已经持久存储在了磁盘中,此后的数据变更存在于内存和journal日志中。而对于write操作,会首先被持久写入juornal,然后在内存中保存变更数据,条件满足后会提交一个新的检测点,即检测点之前的数据只是在journal中持久存储,但是并没有在mongodb的数据文件中持久化。延迟持久化可以提升磁盘效率,为了确保数据的安全性,mongodb将所有的变更操作写入journal并间歇性的持久到磁盘上,对于实际数据文件将延迟写入,和WT一样journal也可以用于数据恢复

———————————————————————————————————

(6)内存映射存储引擎MMAP

  1. MongoDB会把数据文件映射到内存中,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能
  2. MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟内存管理器去处理,这样做的好处是简化的MongoDB的工作,但坏处是用户无法控制MongoDB占用多大的内存,一般来说虚拟内存管理器会把除了系统使用的内存之外的内存全部划给MongoDB使用
  3. MongoDB的内存使用机制(也就是持久化)让它在缓存重建方面更有优势,简单来说,重启进程,缓存依然有效

(7)MongoDB数据类型

字符串这是用于存储数据的最常用的数据类型。MongoDB中的字符串必须为UTF-8
整型此类型用于存储数值。整数可以是32位或64位,具体取决于服务器
布尔类型此类型用于存储布尔值true/false值
双精度浮点数此类型用于存储浮点值
最小键/最大键此类型用于将值与最小和最大的BSON元素进行比较
数组此类型用于将数组或列表或多个值存储到一个键中
时间戳ctimestamp,当文档被修改或添加时,可以方便地进行录制
对象此数据类型用于嵌入式文档
NULL此类型用于存储Null值
符号该数据类型与字符串相同;但是,通常保留用于使用特定符号类型的语言
日期此数据类型用于以UNIX时间格式存储当前日期或时间。您可以通过创建日期对象并将日,月,年的日期进行指定自己需要的日期时间。
对象ID此数据类型用于存储文档的ID
二进制数据此数据类型用于存储二进制数据
代码此数据类型用于将JavaScript代码存储到文档中
正则表达式此数据类型用于存储正则表达式

(8)MongoDB中自带的四个数据库

MongoDB中默认有四个数据库,分别是config、admin、local、test

config: 集群中使用的,分片数据库

admin: 保存用户信息、权限的数据库

local: local的数据只存在于本地数据,不会被同步到其他数据库

test: test为MongoDB默认登录的数据库,只要不知道数据库登录,那么登录的就是test

二、部署MongoDB

(1)实验环境

系统ip主机名MongoDB版本
Centos7.4192.168.100.202mongodbmongodb-linux-x86_64-rhel70-4.4.5.tgz mongodb-database-tools-rhel70-x86_64-100.3.1.tgz

(2)实验步骤

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname mongodb
[root@Centos7 ~]# su
[root@mongodb ~]# systemctl stop firewalld
[root@mongodb ~]# setenforce 0
setenforce: SELinux is disabled
[root@mongodb ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
       
******(2)上传源码包,MongoDB 4版本以上的/bin目录中的工具进行了分离,只有一些基础工具可以使用,需要安装插件才能使用/bin下的其他工具
[root@mongodb ~]# ll
总用量 133084
-rw-------. 1 root root     1264 112 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 64213416 611 18:28 mongodb-database-tools-rhel70-x86_64-100.3.1.tgz  #这个就是工具包
-rw-r--r--  1 root root 72053873 611 18:15 mongodb-linux-x86_64-rhel70-4.4.5.tgz
[root@mongodb ~]# ulimit -n 25000  #同一时间最多开启的文件数
[root@mongodb ~]# ulimit -u 25000  #用户最多开启的程序数目
[root@mongodb ~]# echo 0 > /proc/sys/vm/zone_reclaim_mode  #设置内核参数,表示当某个节点内存不足时,可以借用其他节点的内存 
[root@mongodb ~]# sysctl -w vm.zone_reclaim_mode=0
vm.zone_reclaim_mode = 0
[root@mongodb ~]# echo never >/sys/kernel/mm/transparent_hugepage/enabled
[root@mongodb ~]# echo never >/sys/kernel/mm/transparent_hugepage/defrag
[root@mongodb ~]# tar xf mongodb-linux-x86_64-rhel70-4.4.5.tgz 
[root@mongodb ~]# mkdir /usr/local/mongodb
[root@mongodb ~]# mv  mongodb-linux-x86_64-rhel70-4.4.5 /usr/local/mongodb/
[root@mongodb ~]# echo "export PATH=/usr/local/mongodb/bin:\\$PATH" >>/etc/profile  #修改环境变量优化MongoDB命令执行路径
[root@mongodb ~]# source /etc/profile
[root@mongodb ~]# tar xf mongodb-database-tools-rhel70-x86_64-100.3.1.tgz 
[root@mongodb ~]# mkdir /usr/local/mongodb/bin
[root@mongodb ~]# mv mongodb-database-tools-rhel70-x86_64-100.3.1/bin/* /usr/local/mongodb/bin/
[root@mongodb ~]# ln -s /usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.4.5/bin/* /usr/local/mongodb/bin/

******(3)创建mongodb的存储目录以及配置文件
[root@mongodb ~]# mkdir /usr/local/mongodb/data
[root@mongodb ~]# mkdir /usr/local/mongodb/logs
[root@mongodb ~]# mkdir /usr/local/mongodb/conf
[root@mongodb ~]# touch /usr/local/mongodb/logs/mongodb.log
[root@mongodb ~]# chmod 777 /usr/local/mongodb/logs/mongodb.log 
[root@mongodb ~]# vim /usr/local/mongodb/conf/mongodb.conf
bind_ip=192.168.100.202  #指定ip
port=27017   #指定端口
dbpath=/usr/local/mongodb/data/ #指定数据存储路径
logpath=/usr/local/mongodb/logs/mongodb.log  #指定日志存储路径
logappend=true   #mongodb日志以追加的方式写入
fork=true    #启动的时候,将mongodb放后台启动
maxConns=5000    #mongodb最大的连接数

******(4)编写服务启动脚本
[root@mongodb ~]# mongod -f /usr/local/mongodb/conf/mongodb.conf  #启动mongodb
about to fork child process, waiting until server is ready for connections.
forked process: 1181
child process started successfully, parent exiting
[root@mongodb ~]# netstat -anpt | grep mongo  #查看是否成功启动
tcp        0      0 192.168.100.202:27017   0.0.0.0:*               LISTEN      1181/mongod  
[root@mongodb ~]# mongo --port 27017 --host 192.168.100.202  #登录mongodb
MongoDB shell version v4.4.5
connecting to: mongodb://192.168.100.202:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session  "id" : UUID("884dbe0a-4ef6-4118-9599-fc3c2118170c") 
MongoDB server version: 4.4.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
	https://community.mongodb.com
---
The server generated these startup warnings when booting: 
        2021-06-11T18:32:24.504+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2021-06-11T18:32:24.504+08:00: You are running this process as the root user, which is not recommended
        2021-06-11T18:32:24.504+08:00: Soft rlimits too low
        2021-06-11T18:32:24.504+08:00:         currentValue: 25000
        2021-06-11T18:32:24.504+08:00:         recommendedMinimum: 64000
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> exit
bye
[root@mongodb ~]# mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown #关闭mongodb
killing process with pid: 1181
[root@mongodb ~]# netstat -anpt | grep mongo
[root@mongodb ~]# echo /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf>>/etc/rc.local   #添加mongodb开机自启
[root@mongodb ~]# vim /etc/init.d/mongodb
#!/bin/bash
case "$1" in
'start')
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf;;
'stop')
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown;;
'restart')
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/bin/mongodb.conf;;
esac
#保存退出
[root@mongodb ~]# chmod +x /etc/init.d/mongodb  #添加可执行权限
[root@mongodb ~]# /etc/init.d/mongodb start   #启动
about to fork child process, waiting until server is ready for connections.
forked process: 1234
child process started successfully, parent exiting
[root@mongodb ~]# netstat -anpt | grep mongo
tcp        0      0 192.168.100.202:27017   0.0.0.0:*               LISTEN      1234/mongod         
[root@mongodb ~]# /etc/init.d/mongodb stop   #关闭
killing process with pid: 1234
[root@mongodb ~]# netstat -anpt | grep mongo

******(5)测试访问mongodb数据库
[root@mongodb ~]# /etc/init.d/mongodb start 
about to fork child process, waiting until server is ready for connections.
forked process: 1291
child process started successfully, parent exiting
[root@mongodb ~]# mongo --port 27017 --host 192.168.100.202  #或者mongo 192.168.100.202:27017也可以
MongoDB shell version v4.4.5
connecting to: mongodb://192.168.100.202:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session  "id" : UUID("a872ecf6-4081-47b6-9559-dccb674f144a") 
MongoDB server version: 4.4.5
---
The server generated these startup warnings when booting: 
        2021-06-11T18:38:54.222+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2021-06-11T18:38:54.222+08:00: You are running this process as the root user, which is not recommended
        2021-06-11T18:38:54.222+08:00: Soft rlimits too low
        2021-06-11T18:38:54.222+08:00:         currentValue: 25000
        2021-06-11T18:38:54.222+08:00:         recommendedMinimum: 64000
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> show databases;  #查看所有数据库,但是只有三个数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> show dbs         #查看所有数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> db.getName()     #查看当前数据库,可以看到是test。test就是第四个库,也是mongodb默认登录的库
test

(3)MongoDB的操作

MongoDB中的命令是可以补齐的

-服务器相关操作

[root@mongodb ~]# mongo 192.168.100.202:27017  #先登录mongodb数据库
> db.help    #查看帮助信息
> help   #查看帮助信息
> db.version()  #查看版本
4.4.5

-数据库相关操作

> show databases  #查看所有数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> show dbs   #查看所有数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> use local  #进入local库
switched to db local
> db.getName() #查看当前在那个库中
local
> use aaa  #mongodb是不用创建库的,只需要进入之后创建集合,库就会自动生成
switched to db aaa
> db.getName()
aaa
> db.dropDatabase()  #删除当前库
 "dropped" : "hehe", "ok" : 1 
> show tables   #只要删除库,其库下的所有集合都会被删除
> show dbs  #查看所有库发现删除成功
admin   0.000GB
config  0.000GB
local   0.000GB

-集合相关操作

> use hehe       #进入hehe库
switched to db hehe
> db.getName()  
hehe
> db.aaa.insert("id":1,"name":"zhangsan")         #在当前库下创建集合aaa
WriteResult( "nInserted" : 1 )       #这个1就表示创建成功
> show dbs      #创建完成后,发现多了一个库
admin   0.000GB
config  0.000GB
hehe    0.000GB
local   0.000GB
> show tables  #查看当前库中所有的表
aaa
> db.aaa.find()      #查看aaa集合中的所有表格
 "_id" : ObjectId("60c370730e8947c79273ddfc"), "id" : 1, "name" : "zhangsan"       #_id相当于主键,不指定的话,_id值是随机生成的
> db.aaa.insert("id":2,"name":"lisi","favorite":["apple","banana","game"]) #再次插入数据,值可以是列表
WriteResult( "nInserted" : 1 )
> db.aaa.find()         #查看aaa集合中的所有表格
 "_id" : ObjectId("60c370730e8947c79273ddfc"), "id" : 1, "name" : "zhangsan" 
 "_id" : ObjectId("60c370ff0e8947c79273ddfd"), "id" : 2, "name" : "lisi", "favorite" : [ "apple", "banana", "game" ] 
> db.aaa.find("id":2)       #筛选aaa集合中id键等于2的表格
 "_id" : ObjectId("60c370ff0e8947c79273ddfd"), "id" : 2, "name" : "lisi", "favorite" : [ "apple", "banana", "game" ] 
> db.aaa.findOne("id":1)  #使用findOne查看,输出信息更为简洁一点

	"_id" : ObjectId("60c370730e8947c79273ddfc"),
	"id" : 1,
	"name" : "zhangsan"

> db.aaa.findOne("id":2)

	"_id" : ObjectId("60c370ff0e8947c79273ddfd"),
	"id" : 2,
	"name" : "lisi",
	"favorite" : [
		"apple",
		"banana",
		"game"
	]

> a = db.aaa.findOne("id":2)      #MongoDB中可以赋予变量名和变量值

	"_id" : ObjectId("60c370ff0e8947c79273ddfd"),
	"id" : 2,
	"name" : "lisi",
	"favorite" : [
		"apple",
		"banana",
		"game"
	]

> a.id  #读取a中id键的值
2
> a.name  #读取a中name键的值
lisi
> db.aaa.findOne("id":2).id  #这两个和上面相同
2
> db.aaa.findOne("id":2).name
lisi
> db.aaa.insert("id":3,"id":4,"name":"heheh","name":"bbbb")   #插入多个相同键的值,查看效果
WriteResult( "nInserted" : 1 )
> db.aaa.find()
 "_id" : ObjectId("60c370730e8947c79273ddfc"), "id" : 1, "name" : "zhangsan" 
 "_id" : ObjectId("60c370ff0e8947c79273ddfd"), "id" : 2, "name" : "lisi", "favorite" : [ "apple", "banana", "game" ] 
 "_id" : ObjectId("60c372e30e8947c79273ddfe"), "id" : 4, "name" : "bbbb"    #发现最后一个配置的键值会生效
> db.aaa.insert("":22)    #键名可以为空,但是一般不会用
WriteResult( "nInserted" : 1 )
> db.aaa.find()
 "_id" : ObjectId("60c370730e8947c79273ddfc"), "id" : 1, "name" : "zhangsan" 
 "_id" : ObjectId("60c370ff0e8947c79273ddfd"), "id" : 2, "name" : "lisi", "favorite" : [ "apple", "banana", "game" ] 
 "_id" : ObjectId("60c372e30e8947c79273ddfe"), "id" : 4, "name" : "bbbb" 
 "_id" : ObjectId("60c3733b0e8947c79273ddff"), "" : 22 
> db.aaa.insert("$id":4)  #键名不能以$开头
WriteResult(
	"nInserted" : 0,
	"writeError" : 
		"code" : 2,
		"errmsg" : "Document can't have $ prefixed field names: $id"
	
)
> db.aaa.insert("aaa$id":4)   #不能以$开头,但是可以包含$这种特殊字符
WriteResult( "nInserted" : 1 )
> db.aaa.find()
 "_id" : ObjectId("60c370730e8947c79273ddfc"), "id" : 1, "name" : "zhangsan" 
 "_id" : ObjectId("60c370ff0e8947c79273ddfd"), "id" : 2, "name" : "lisi", "favorite" : [ "apple", "banana", "game" ] 
 "_id" : ObjectId("60c372e30e8947c79273ddfe"), "id" : 4, "name" : "bbbb" 
 "_id" : ObjectId("60c3733b0e8947c79273ddff"), "" : 22 
 "_id" : ObjectId("60c373970e8947c79273de01"), "aaa$id" : 4 
> db.aaa.update("id":1,$set:"name":"abc")  #修改aaa集合中,id键的值等于1的表格的name键改为abc
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
> db.aaa.find()
 "_id" : ObjectId("60c370730e8947c79273ddfc"), "id" : 1, "name" : "abc"    #成功修改
 "_id" : ObjectId("60c370ff0e8947c79273ddfd"), "id" : 2, "name" : "lisi", "favorite" : [ "apple", "banana", "game" ] 
 "_id" : ObjectId("60c372e30e8947c79273ddfe"), "id" : 4, "name" : "bbbb" 
 "_id" : ObjectId("60c3733b0e8947c79273ddff"), "" : 22 
 "_id" : ObjectId("60c373970e8947c79273de01"), "aaa$id" : 4 
> for(i=1;i<=1000;i++)db.abc.insert(以上是关于MongoDB概述与部署的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 4系列概述与安装和资源介绍

MongoDB 4系列概述与安装和资源介绍

如何将代码片段存储在 mongodb 中?

centos7部署Mongodb复制集结合分片(超详细)

centos7部署MongoDB数据库复制集(超详细)

MongoDB——MongoDB副本集(Replica Sets)