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为例。
mysql | mongodb | desc |
---|---|---|
database | database | 数据库 |
collection | table | 表 |
document | row | 行 |
index | index | 索引 |
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 collections
或show tables
来查看所有表。
- 开启权限认证
把配置文件中
authorization
的disabled
改成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