Mongodb安装配置及基本使用

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、安装配置

  • 新版本的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,日志文件目录logs
mkdir conf data logs
# 然后把配置写入配置文件中mongodb.conf
tee -a ./conf/mongodb.conf <<-'EOF'

systemLog:
   destination: file
   path: ./logs/mongod.log
   logAppend: true
storage:
   dbPath: ./data
   journal:
      enabled: true
processManagement:
   fork: true
net:
   bindIp: 0.0.0.0
   port: 27017
security:
   authorization: disabled
EOF
  • 启动
sh operate.sh run
  • 查看状态
sh operate.sh sta

在这里插入图片描述

  • 进入shell
sh operate.sh she

在这里插入图片描述

  • 创建用户
show dbs
use admin
db.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 MongoClient

def 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=$1
ps_1=$dir_home/bin/mongod
log_dir=$dir_home/logs
log_file=$log_dir/$app.log
if [[ ! -e $log_dir ]];then
    mkdir -p $log_dir
fi
pid_1=`ps -ef | grep $ps_1 | grep -v grep | awk '{print $2}'`
if [[ $pid_1 ]]; then
    pids=`ps -ef | grep $pid_1 | grep -v grep | awk '{print $2}'`
fi

# 提示信息
msg="Please input the param 【<run|kil|res|sta|log|she>】"

# 定制化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" ]]; then
    if [[ ! $pids ]]; then
        run
        msg='Start success'
        custom_print $msg
    else
        msg='The service is already running'
        custom_print $msg
    fi

# 停止服务
elif [[ $operate = "kil" || $operate = "stop" ]]; then
    if [[ $pids ]]; then
        kill -9 $pids
        msg='Stopped success'
        custom_print $msg
    else
        # 服务早已停止或未启动
        msg='The service is already down'
        custom_print $msg
    fi

# 重启服务
elif [[ $operate = "res" || $operate = "restart" ]]; then
    if [[ $pids ]]; then
        kill -9 $pids
    fi
    run
    msg='Restart success'
    custom_print $msg

# 查看服务运行状态
elif [[ $operate = "sta" || $operate = "status" ]]; then
    if [[ $pids ]]; then
        # 黄底蓝字
        echo -e "\033[43;34m RUNNING \033[0m"
    else
        # 蓝底黑字
        echo -e "\033[44;30m STOPPED \033[0m"
    fi

# 查看服务运行日志
elif [[ $operate = "log" ]]; then
    if [[ -e $log_file ]]; then
        tail -f $log_file
    else
        msg="No logs have been generated so far"
        custom_print $msg
    fi

# 进入shell
elif [[ $operate = "she" || $operate = "shell" ]]; then
    $dir_home/bin/mongosh --username wlf --password "wlf@123456"  --authenticationDatabase admin mongodb://110.110.110.110:27017

else
    custom_print $msg
fi

5、附赠DBeaver-ee-22.1.0

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42761569/article/details/129736895