美文网首页
mongoDB(二)

mongoDB(二)

作者: 吃可爱长大鸭 | 来源:发表于2019-12-24 20:32 被阅读0次

    第四章 插入命令

    查看指令

    test:登录时默认存在的库
    admin库:系统预留库,MongoDB系统管理库
    local库:本地预留库,存储关键日志
    config库:MongoDB配置信息库
    

    查看数据库命令

    show databases/show dbs
    show tables/show collections
    use admin
    db/select database()
    

    插入单条

    db.user_info.insert({"name":"SATA","age":27,"ad":"北京市朝阳区"})
    db.user_info.insert({"name":"HU","age":27,"ad":"北京市朝阳区"})
    db.user_info.insert({"name":"GANG","age":28,"ad":"北京市朝阳区"})
    db.user_info.insert({"name":"MA","age":28,"ad":"北京市朝阳区"})
    db.user_info.insert({"name":"YI","age":28,"ad":"北京市朝阳区","sex":"待定"})
    

    插入多条

    db.inventory.insertMany([
        { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
        { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
        { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
        { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
        { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
    ]);
    

    第五章 查询命令

    1.查询一条

    db.user_info.findOne()
    

    2.查询所有

    db.user_info.find()
    

    3.查询符合条件

    db.user_info.find({"age":28})
    select * from user_info where age = 28;
    

    4.查询嵌套的条件

    db.inventory.find( { "size.uom": "in" } )
    db.inventory.find( 
        { 
            "size.uom": "in" 
        } 
    )
    

    5.逻辑查询:and

    db.inventory.find( { "size.uom": "cm" ,"status" : "A"} )
    db.inventory.find( 
        { 
            "size.uom": "cm" ,
            "status" : "A"
        } 
    )
    

    6.逻辑查询 或

    db.inventory.find(
        {
            $or:[
                    {status:"D"},
                    {qty:{$lt:30}}
                ]
        }
    )
    

    7.逻辑查询+或+and+正则表达式

    db.inventory.find({status:"A",$or:[{qty:{$lt:30}},{item:/^p/}]})
    db.inventory.find( 
        {
            status: "A",
            $or: [ 
                    { qty: { $lt: 30 } }, 
                    { item: /^p/ } 
                 ]
        } 
    )
    

    第六章 更新数据

    1.更改匹配条件的单条数据

    db.inventory.find({ "item" : "paper" })
    db.inventory.updateOne({ "item" : "paper" },{$set: {  "size.uom" : "cm",  "status" : "P" }})
    db.inventory.updateOne(
        { "item" : "paper" },
        {
          $set: {  
                    "size.uom" : "cm",  
                    "status" : "P" 
                }
        }
    )
    

    2.更改匹配条件的多条数据

    db.inventory.find({ "qty" : { $lt: 50 } })
    db.inventory.updateMany(
        { "qty" : { $lt: 50 } },
        {
           $set: 
                { 
                    "size.uom" : "mm", 
                    "status": "P" 
                }
        }
    )
    

    3.添加字段

    db.user_info.find({ "age" : 27})
    db.user_info.updateMany(
        { "age" : 27},
        {
           $set: 
                { 
                    "pet" : "cat"
                }
        }
    )
    

    第七章 索引

    1.查看执行计划

    db.user_info.find({"age":{ $lt: 30 }})
    db.user_info.find({"age":{ $lt: 30 }}).explain()
    

    2.创建索引

    db.user_info.createIndex({ age: 1 },{background: true})
    
    参数说明:
    age:1 表示对age字段作为索引的字段,1表示排序规则为升序,-1表示为降序
    background 表示放在后台创建,不影响读写
    

    3.查看索引

    db.user_info.getIndexes()
    

    4.再次查看执行计划

    db.user_info.find({"age":{ $lt: 30 }}).explain()
    

    关键词

    "stage" : "IXSCAN"
    "indexName" : "age_1"
    

    5.删除索引

    db.user_info.dropIndex("age_1")
    

    索引类型

    COLLSCAN - 表示查询的字段并没有建立索引,所以查询的时候会使用全表扫描
    IXSCAN   – 表示使用索引来找出对应的文档
    

    第八章 删除

    1.先查找需要删除的数据

    db.inventory.find({"status":"P"})
    

    2.删除单条

    db.inventory.deleteOne({"status":"P"})
    

    3.删除多个

    db.inventory.deleteMany({"status":"P"})
    

    4.删除索引

    db.user_info.dropIndex("age_1")
    

    5.删除集合

    show dbs
    db 
    show tables
    db.inventory.drop()
    

    6.删除库

    show dbs
    db 
    db.dropDatabase()
    

    第九章 mongostat命令解释

    mongo工具

    0.命令介绍
    mongod          #启动命令
    mongo           #登录命令         
    mongodump           #备份导出,全备压缩
    mongorestore        #恢复
    mongoexport         #备份,数据可读json
    mongoimport         #恢复
    mongostat       #查看mongo运行状态
    mongotop        #查看mongo运行状态
    mongos          #集群分片命令
    

    1.mongostat

    各字段解释说明:
    insert/s : 官方解释是每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作
    query/s : 每秒的查询操作次数
    update/s : 每秒的更新操作次数
    delete/s : 每秒的删除操作次数
    getmore/s: 每秒查询cursor(游标)时的getmore操作数
    command: 每秒执行的命令数,在主从系统中会显示两个值(例如 3|0),分表代表 本地|复制 命令
    注: 一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义应该不大)
    dirty: 仅仅针对WiredTiger引擎,官网解释是脏数据字节的缓存百分比
    used:  仅仅针对WiredTiger引擎,官网解释是正在使用中的缓存百分比
    flushes:
    For WiredTiger引擎:指checkpoint的触发次数在一个轮询间隔期间
    For MMAPv1 引擎:每秒执行fsync将数据写入硬盘的次数
    注:一般都是0,间断性会是1, 通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了
    vsize: 虚拟内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
    res:  物理内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
    注:这个和你用top看到的一样, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序狂吃内存。
    
    qr: 客户端等待从MongoDB实例读数据的队列长度
    qw:客户端等待从MongoDB实例写入数据的队列长度
    ar: 执行读操作的活跃客户端数量
    aw: 执行写操作的活客户端数量
    注:如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了
    netIn:MongoDB实例的网络进流量
    netOut:MongoDB实例的网络出流量
    注:此两项字段表名网络带宽压力,一般情况下,不会成为瓶颈
    conn: 打开连接的总数,是qr,qw,ar,aw的总和
    注:MongoDB为每一个连接创建一个线程,线程的创建与释放也会有开销,所以尽量要适当配置连接数的启动参数,maxIncomingConnections,阿里工程师建议在5000以下,基本满足多数场景
    

    相关文章

      网友评论

          本文标题:mongoDB(二)

          本文链接:https://www.haomeiwen.com/subject/spifoctx.html