暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【技术系列】MongoDB的常用操作

程序员Layne 2022-11-26
497

    最近在公司项目中使用到了MongoDB数据库,在这里记录一下平时用到的一些指令或脚本,方便后面使用时查询操作。

工具脚本

实例启动脚本mongod

    # 指定配置文件启动一个mongo实例
    mongod -f /app/etc/mongo.conf
    单机模式基本配置conf内容:
      #以下是单机模式基本配置conf文件内容:
      # 数据库文件位置
      dbpath=/data/mongo/dbs/
      directoryperdb=true
      # 数据库日志位置
      logpath=/data/mongo/logs/m.log
      # 错误日志采用追加模式
      logappend=true
      # 进程文件
      pidfilepath=/data/mongo/mongodb.pid
      # 是否以守护进程方式启动
      fork=true
      # 端口号
      port=27017
      # 绑定地址,本机地址
      bind_ip=127.0.0.1
      # 配置占用缓存大小 18G
      wiredTigerCacheSizeGB=18
      客户端连接mongo
        #无任何参数  默认访问地址 127.0.0.1:27017 
        mongo --username mongo --password mongo@123


        #访问 127.0.0.1:27017 mongo实例 账号:mongo 密码:mongo@123
        mongo --port 27017 --host 127.0.0.1 --username mongo --password mongo@123


        #执行js文件
        mongo --port 27017 --host 127.0.0.1 ./mongo_delete_coll.js
        数据导出mongodump
        会导出两个文件,后缀如下
        .bson 数据文件
        .metadata.json 元数据文件,索引配置等信息
          #连接mongo实例 127.0.0.1:27017 访问Layne库 test_coll集合数据 导出到目录下/app/data/
          # -d 指定数据库
          # -c 指定集合名称 不指定的话则导出数据库所有集合
          # -o 指定输出目录
          mongodump --port 27017 --host 127.0.0.1 -d Layne -c test_coll  -o /app/data/


          # 导出文件内容 bson数据文件 和一个元数据文件
          -rw-r--r-- 1 root root 327061504 Sep 20 11:28 test_coll.bson
          -rw-r--r-- 1 root root       588 Sep 20 11:28 test_coll.metadata.json

          数据导入mongorestore

          若指定了.bson文件则只导入指定文件数据

          若指定到目录,则会导入目录下所有.bson文件数据

            # mongorestore <options> <directory or file to restore>
            # --drop 指令 在导入集合时,会先删除集合在导入
            # --noIndexRestore 导入数据集合时,不恢复索引数据 .metadata.json文件
            # -d 恢复到数据库
            # -c 恢复到指定集合名称 不指定的话则恢复目录下所有.bson后缀文件
            #连接mongo实例 127.0.0.1:27017 访问Layne库 test_coll集合数据 导入目录下/app/data/Layne/test_coll.bson文件数据
            mongorestore --port 27017 --host 127.0.0.1 -d Layne -c test_coll /app/data/Layne/test_coll.bson

            语句操作

            连接mongo数据库

              # 连接mongo数据库
              mongo --host=127.0.0.1 --port=27017
              # 以下是连接成功返回内容:
              # MongoDB shell version v4.4.6
              # connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
              # Implicit session: session { "id" : UUID("f2d5c372-a7aa-42c6-8893-a18acdeb529a") }
              # MongoDB server version: 4.4.6

              查看所有数据库列表 show dbs

                # 查看所有数据库列表
                show dbs
                # 以下是返回内容:数据库名称 | 存储大小
                # Layne 0.000GB
                # admin 0.000GB
                # config 0.000GB
                # jasonTest 0.000GB
                # local 0.000GB

                使用指定数据库 use <dbname>

                  # 使用Layne数据库
                  use Layne
                  # 以下是返回内容:
                  # switched to db One

                  查看数据库下所有集合列表 show tables | show collections

                    #查看当前数据库下所有集合列表
                    show tables
                    show collections

                    删除集合

                      # 删除Layne集合数据 删除集合后  会释放内存,当对集合进行delete删除数据操作时,并不会释放内存
                      db.Layne.drop()

                      查询集合数据量 count

                        #方式一
                        db.coll_test.count({})
                        #方式二
                        db.coll_test.countDocuments({条件参数json})

                        查询集合一条数据

                          #查看集合coll_test一条数据
                          db.coll_test.findOne()

                          查询集合数据并格式化输出 pretty

                            # 查看集合coll_test一条数据 格式化输出
                            db.coll_test.find({'macid':"12345678"}).limit(1).pretty()

                            查询条件进行排序 sort  -1:倒序    1:正序

                              db.coll_test.find({}).sort({"ctime":-1}).limit(2).pretty()

                              分页查询参数 skip,limit   skip从0开始计算

                                db.coll_test.find({}).sort({"ctime":1}).limit(2).skip(0).pretty()

                                模糊查询条件,利用正则方式  $regex,效率有点低

                                  # 模糊匹配包含1192的数据内容 简写模式
                                  db.coll_test.find({"macid":/1192/}).limit(2).pretty()
                                  # 模糊匹配包含1192的数据内容 完整模式  $options: 'x' 代表忽略大小写敏感
                                  db.coll_test.find({"macid": { $regex: /1192/, $options: 'x' }}).limit(2).pretty()

                                  模糊查询条件,利用文本搜索方式$text 需要在查询的字段上建立text属性索引。这种方式查询效率比正则方式快,但是存储空间会占用很多,是利用空间换时间的概念。

                                    # 模糊匹配包含1192的数据内容
                                    db.coll_test.find({$text:{$search:"1192"}}).limit(2).pretty()


                                    文章转载自程序员Layne,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论