Background

  • MongoDB 目前最新6.0,下面示例以6.0.4版本介绍。
  • MongoDB 是C++语言编写的一个基于分布式文件存储的NoSQL数据库,介于关系型数据库和非关系型数据库之间。
  • MongoDB文档是类似于JSON对象的BSON,字段值可以包含其他文档、数组、文档数组。
  • MongoDB 的逻辑结构是一种层次结构,包含:文档(document),集合(collection),数据库(database)。
  • 支持存储文件,存储大文件(大于16M)需要使用gridfs,但只适合存储不需要修改内容的场景。
  • MongoDB 官方文档地址:【https://www.mongodb.com/docs/manual/introduction/】

1、与关系型数据库对比

这里以mysql为例。

mysqlmongodbdesc
databasedatabase数据库
collectiontable
documentrow
indexindex索引
join$lookup表连接
select * from users;db.users.find({})表查询

2、安装配置

  • 下载
    官方下载地址:【https://www.mongodb.com/try/download/community】
    鉴于国外网站访问不稳定,我这里提供bdwp地址:【https://pan.baidu.com/s/1-Oba9UcGqUgGMGFMWjGdPA】【提取码:king】
  • 新版本的shell和gridfs等都作为插件提出来了,所以需要单独安装配置。
  • mongosh-1.7.1-linux-x64.tgz解压后就是 mongosh,mongodb-database-tools-rhel70-x86_64-100.7.0.tgz解压后就是 mongofiles,如下2图所示,我是自己解压后放到了mongodb安装目录的bin目录下。

  • 安装
tar zxf mongodb-linux-x86_64-rhel70-6.0.4.tgz

  • 配置
# 新建配置文件目录conf,数据文件目录data,日志文件目录logsmkdir conf data logs# 然后把配置写入配置文件中mongodb.conftee -a ./conf/mongodb.conf <<-'EOF'systemLog: destination: file path: ./logs/mongod.log logAppend: truestorage: dbPath: ./data journal:enabled: trueprocessManagement: fork: truenet: bindIp: 0.0.0.0 port: 27017security: authorization: disabledEOF
  • 启动
sh operate.sh run
  • 查看状态
sh operate.sh sta

  • 进入shell
sh operate.sh she

  • 创建用户
show dbsuse admindb.createUser({ user: "wlf", pwd: "wlf@123456", roles: [{"role": "userAdminAnyDatabase", "db": "admin"}, {"role": "readWriteAnyDatabase", "db": "admin"}]})

  • 创建数据库
  • 在 MongoDB 中我们可以使用use命令来创建数据库,如果该数据库不存在,则会创建一个新的数据库,如果该数据库已经存在,则将切换到该数据库。
  • 可以使用show dbs命令查看所有数据库。
  • 可以使用db命令来查看当前选择的数据库。
  • 可以使用show collectionsshow tables来查看所有表。

  • 开启权限认证

把配置文件中authorizationdisabled改成enabled,然后重启服务就行了。

  • 开启认证后工具连接,这里以dbeaver为例

3、基本使用

  • 具体的使用还是参考官方文档吧,我这里以python api为例介绍下一个场景的使用。
  • 从多级数据对象中查嵌套数组对象信息,并且只要子节点信息,不要父节点信息。
  • 实现是基于mongodb的aggregate、match、unwind、project函数实现。
  • 先下载依赖库
pip3 install pymongo==4.3.3
  • python demo示例
from pymongo.mongo_client import MongoClientdef mongo_client():""""""url = "mongodb://110.110.110.110:27017/"username = "wlf"password = "wlf@123456"return MongoClient(url, username=username, password=password)def insert_data(db):# 指定集合collection = db['stu']# 插入数据stu1 = {'id': '001', 'name': 'zhangsan', 'age': 10}stu2 = {'id': '002', 'name': 'lisi', 'age': 15}stu3 = {'id': '003', 'name': 'wangwu', 'age': 20}collection.insert_one(stu1)collection.insert_many([stu2, stu3])def main():"""主函数"""mc = mongo_client()# 指定数据库db = mc['yunpeng']# 指定集合collec = db['tenant']# 插入数据# collec.insert_one(values)# 查询数据# rets = collec.find({'projects.id': 1})# rets = collec.find({'projects': {'$elemMatch': {'id': 1}}}, {'_id': 0, 'projects': {'users': 1}})rets = collec.aggregate([{"$match": {"id": "6419d1769e09000041005f6b"}},{"$unwind": "$application_type"},{"$unwind": "$application_type.application"},{"$project": {"_id": 0,"app_id": "$application_type.application.id","app": "$application_type.application.name",}}])for ret in rets:print(ret)if __name__ == '__main__':main()
  • 查询示例数据

  • 查询结果

4、国际惯例附赠mongod服务操作脚本 operate.sh

#!/bin/bash:<<!【脚本说明】1、此脚本适用操作python程序;2、支持服务启动、停止、重启、查看状态、查看日志;!# 程序名称app=mongod# 程序所在目录dir_home=/opt/mongodb-6.0.4# 启动命令run_cmd="$dir_home/bin/mongod -f $dir_home/conf/mongodb.conf"# 服务基本信息operate=$1ps_1=$dir_home/bin/mongodlog_dir=$dir_home/logslog_file=$log_dir/$app.logif [[ ! -e $log_dir ]];thenmkdir -p $log_dirfipid_1=`ps -ef | grep $ps_1 | grep -v grep | awk '{print $2}'`if [[ $pid_1 ]]; thenpids=`ps -ef | grep $pid_1 | grep -v grep | awk '{print $2}'`fi# 提示信息msg="Please input the param 【】"# 定制化shell输出function custom_print(){echo -e "\033[5;34m ***** \033[0m"echo -e "\033[32m $@ ! \033[0m"echo -e "\033[5;34m ***** \033[0m"}# 启动命令function run(){nohup $run_cmd > /dev/null 2>&1 &}# 启动服务if [[ $operate = "run" || $operate = "start" ]]; thenif [[ ! $pids ]]; thenrunmsg='Start success'custom_print $msgelsemsg='The service is already running'custom_print $msgfi# 停止服务elif [[ $operate = "kil" || $operate = "stop" ]]; thenif [[ $pids ]]; thenkill -9 $pidsmsg='Stopped success'custom_print $msgelse# 服务早已停止或未启动msg='The service is already down'custom_print $msgfi# 重启服务elif [[ $operate = "res" || $operate = "restart" ]]; thenif [[ $pids ]]; thenkill -9 $pidsfirunmsg='Restart success'custom_print $msg# 查看服务运行状态elif [[ $operate = "sta" || $operate = "status" ]]; thenif [[ $pids ]]; then# 黄底蓝字echo -e "\033[43;34m RUNNING \033[0m"else# 蓝底黑字echo -e "\033[44;30m STOPPED \033[0m"fi# 查看服务运行日志elif [[ $operate = "log" ]]; thenif [[ -e $log_file ]]; thentail -f $log_fileelsemsg="No logs have been generated so far"custom_print $msgfi# 进入shellelif [[ $operate = "she" || $operate = "shell" ]]; then$dir_home/bin/mongosh --username wlf --password "wlf@123456"--authenticationDatabase admin mongodb://110.110.110.110:27017elsecustom_print $msgfi

5、附赠DBeaver-ee-22.1.0

下载地址:【https://pan.baidu.com/s/1vEgvZVdEsN0wpLTh3InIxA】
提取码:king