美文网首页
mongob复习

mongob复习

作者: dream_seeker | 来源:发表于2018-09-04 01:38 被阅读0次

    mongod服务、开启、关闭、重启、
    sudo service mongod start
    sudo service mongod stop
    sudo service mongod restart

    配置文件路径:/etc/mongod.conf

    3、链接
    mongo
    mongo -h ip:port
    mongo --host ip --port port

    4、mongodb的操作
    数据库
    查看所有数据库:show dbs
    查看当前所在数据库:db
    删除数据库db.dropDatabase()
    查看数据库的详细信息: db.stats()

    5、集合
    db.createCollection('集合名字',属性)

    设置固定大小集合:
    db.createCollection('集合名',{capped:true,size:大小,max:最大文档数量})

    删除集合:db.集合名.drop()

    6、文档的操作

    增加一条:
    db.集合名.insert({key:'value'})

    增加多条:
    db.集合名.insert({key1:'value',key2:'value',key3:'value'})

    删除:
    删除所有文档:
    db.集合名.remove({})

    删除符合条件所有文档:
    db.集合名.remove({key:value})

    删除一条:

    db.集合名.remove({key:values},{justOne:true})

    修改:

    更新文档中的某些建,键存在跟新,不存在添加
    db.集合名.update({key:value},{$set:{key:value}})

    全文档更新:

    db.集合名.update({key:value},{key:value})

    全文档更新:如果没找到作为一个新文档插入0)

    db.集合名.update({key:value},{key:value})

    save:

    1、情况:加入我们更新的文档id存在则修改全文档更新,不存在作为新文档插入
    db.集合名.save({_id:'value',key:value,key:value,.....})

    查找:

    db.集合名.find({key:value})根据条件查找

    限制查询:

    db.集合名.find({条件}).limit(条数)#返回几条结果

    跳过查询:

    db.集合名.find({条件}).skip(num)#从几条开始

    结合使用:

    db.集合名.find({条件}).skip().limit()#结果从几条开始,返回几条结果

    自定义查询:

    db.集合名.find({$where:function(){return this.age>20}})

    排序:sort 1 升序 -1 降序

    db.集合名.find({条件}).sort({key:1})

    投影:project 1 表示显示 0 表示不显示

    db.集合名,find({},{name:1,_id:0})
    db.集合名.find({},{name:0})

    去重:distinct

    db.集合名.distinct({age,{name:value}}) #查看姓名是**的人中,年龄都是多大

    count()#计算总和

    db.集合名.find().count()
    db.集合名.count({条件})

    type

    db.集合名.find({key:{$type:'string'}})#返回所有键为字符串类型的文档

    比较运算符

    = db.集合名.find({age:20}).count()

    小于 lt 小于等于lte
    db.集合名.find({key:{$lt:10000}}).count()#薪资小于10000有多少人

    大于gt 大于等于gte 不等于$ne

    、逻辑运算符、

    or db.集合名.find({or:[{xinzi:{$gt:10000}},{name:'小明'}]})#薪资大于10000或叫小明的人

    范围运算符

    in db.集合名.find({age:{in:[19,20,30]})年龄是19、20、30 三数任意一个
    $nin 不再之内的

    正则查询:(一定是子符串)

    db.集合名.find({name:/^李.?/}) #姓李的人查出来
    db.集合名.find({name:{$regex:'^李.
    ?'}})

    自定义查询:

    db.集合名.find({$where:function(){reture this.name == '李磊'}})

    mongd聚合操作

    groupproject
    matchskip
    limitunwind
    $sort

    函数

    sumavg
    maxmin
    pushlast
    $first

    group:分组 db.集合名.aggregate({group:{_id:'class',count:{sum:1}}})#根据class分组,并求出班级都有几个

    班级的平均年龄:

    db.集合名.aggregate({group:{_id:'key',avg:{avg:'age'}}})

    返回班级中的年龄最大致,最小年龄

    db.集合名.aggregate({group:{_id:'key',maxage:{max:'age'}}})
    db.集合名.aggregate({group:{_id:'key',minage:{min:'age'}}})

    push:根据班级进行分组,返回班级下所有的同学名字,返回的是一个数组

    db.集合名.aggregate({group:{_id:'class',names:{push:name}}})

    last返回集合最后一个名字

    db.集合名.aggregate({group:{_id:'null',lasts:{last:'$name'}}})

    last返回集合第一个名字

    db.集合名.aggregate({group:{_id:'null',firsts:{first:'$name'}}})

    project 只返回习性名、年龄

    db.集合名.aggregate([{$project:{name:1,age:20,_id:0}}])

    match 过滤 返回年龄在90 - 100 之间的结果

    db.集合名.aggregate([{match:{age:{gt:90,$lt:100}}}])

    sort 返回年龄在90 - 100 之间的结果 排序

    db.集合名.aggregate([{match:{age:{gt:90,lt:100}}},{sort:{age:-1}}])

    unwind:将文档中的键对应的数组,拆分成单挑独立数据

    tags:[aaa,ddd,fff]
    db.集合名.aggregate([{unwind:'tags'}])

    跳过和限制查询

    db.集合名.aggregate([{match:{age:{gt:30}}},{skip:2},{limit:3}])

    #######################8、索引
    _id索引 在创建文档的时候自动创建 (mongodb的索引都在内存中)
    普通、索引:
    单键索引
    db.集合名.createIndex({key:1})
    复合索引
    db.集合名.createIndex({key:1,key1:-1})
    子文档索引
    {students:{name:xiaoming,age:20}}
    db.集合名.createIndex({'students.name':1,'students.age':-1})
    db.集合名.find({'students.name':'xiaoming','students.age':20})

    数组索引
    db.集合名.createIndex({tags:1})

    全文索引(注意:全文索引中只能创建一个)
    db.集合名.createIndex({key:'text'})
    使用他:db.集合名.find({text:{search:'关键词'}})

    索引属性:
    background 在后台创建索引
    unique 创建唯一索引
    name:给索引取名字
    sparse 稀疏索引(如果设置了这个属性,文档中如果含有这个索引键,就创建,否则不创建)

    TTL expireAfterSeconds 秒 :该属性设置在文档中存活的时间,超过则删除(注意:我们直接插入一个时间,会跟文档中真正插入的事件,相差8小时)
    ttl(TTL)补充:
    —id不能设置为日期索引
    不能将已经创建的索引修改。只能删除,重新创建
    TTL不能是复合索引,只能是单键索引
    在固定的集合中不能创建TTL索引

    删除索引

    db.集合名.dropIndex('索引名')

    删除所有索引

    db.集合名.dropIndexes()

    查看集合中的所有索引

    db.集合名.getIndexes()

    查看集合中的索引总大小

    db.集合名.totalIndexSize()

    强制索引

    db.集合名.find({条件}).hint(‘索引名’)

    索引的重建;

    db.集合名.reIndex()

    建立索引的注意事项、优点、缺点

    优点:相当于创建了一个目录,能过提高查找的效率
    缺点:对于插入,删除、修改数据会变慢,因为在做修改数据时,索引也会发生变化,这样会降低效率 2、创建索引会产生额外的 数据加大对硬件的要求
    会额外占用内存
    注意事项:1、尽量减少创建不必要的索引2、经常变动的键不必创建索引
    3、不会成为查询条件的值不需要创建索引 4、mongodb集合中最大索引个数不能超过64个、索引的名称不能超过128个字符,符合索引最大值只能右31个字段
    5、不能命中的索引情况in \nin 范围运算符,以及比较运算符 6、mongodb中索引存放在内存中必须确保不会超过内存
    如果超过内存最大。mongodb 会自动删除一些索引

    创建用户

    创建超级管理员

    use admin
    db.createUser({
    'user':'username'
    'pwd':'123456'
    'rloes':[{role:root,db.:'admin']
    })

    打开mongodb的安全设置
    sudo vim /etc/mongod.conf

    低版本的

    sudo vim /etc/mongodb.conf

    高版本

    sudo vim /etc/mongod.conf
    修改完毕之后重置:sudo service mongod restart

    使用超管登录:
    mongo -u '用户名' -p(’密码‘) --authenticationDatabase 'admin'

    修改用户的信息:
    db.updateUser('用户名',{pwd:'新密码'})
    修改用户民:
    db.updateUser('用户名',{user:‘新用户名’})
    删除权限:
    db.revokeRolesFromUser('用户名',[{role:'权限',db:'数据库'}])
    添加权限:
    db.grantRolesToUser('用户名',[{role:'权限',db:'数据库'}])
    1、删除用户:
    db.dropUser('用户名')
    2、删除用户:
    db.system.users.remove('用户名')
    3、查看所有用户:
    db.system.users.fond()

    数据库的备份

    mongodump -h ip:端口 -d 数据库 -o 路径
    备份集合
    mongodump -h ip:端口 -d 数据库 集合名 -o 路径
    用超级用户进行操作
    mongodump -u 'boss' -p '123456' --authenticationDatabase 'admin' -d jobs -o ~/桌面/dump/

    备份所有数据库

    mongodump -h ip:端口 -o 路径

    恢复数据库

    mongorestore -h 127.0.0.1:27017 -d 数据库名称 --dir ~/Desktop/数据库备份的路径/jobs

    恢复所有数据库

    mongorestore -h ip:端口 --dir 路径

    导出

    mongoexport -d 数据库名 -c 集合 -o 路径/文件名.json --type json
    mongoexport -d 数据库名 -c 集合 -o 路径/文件名.csv --type csv -f '键名,...'

    导入

    mongoimport -d 数据库名 -c 集合名 --file 路径/文件名.json --type json

    mongoinport -d 数据库名 -c 集合名 --file 路径/文件名.csv --headerline --type csv

    mongodb状态检测

    mongostat
    mongotop

    mongod副本集(主从备份)

    目的:防止数据灾难 、实时备份、实现主从数据一致性、读写分离、无宕机行为、分担主服务器的压力
    缺点:具有中心化,所有的增删改操作都需要在主节点上完成,对主节点的压力较大,对主机的性能要求比较高

    如何实现副本集:

    开启mongod服务,至少两个
    mongod --bind_ip ip --port 端口号 --dapath 数据存放的路径 --replSet rs0
    例题:mongod --bind_ip 192.168.43.131 --port 27020 --dbpath ~/桌面/mongodb1 --replSet rs0

    怎么链接?
    mongo -- host ip --port 端口号

    确定主服务器
    rs.initiate()

    添加从节点
    rs.add(ip:端口号)

    激活从节点
    rs.slaveOk()

    mongodb与python交互

    监控状态

    #service mongod start
    

    mongostat

    mongodb与pthon交互

    pip3 install pymongo

    import pymongo
    from bson.objectid import ObjectId

    创建mongo客户端链接

    mongoConn = pymongo.MongoClient('localhost',27017)

    第二种

    mongoConn = pymongo.MongoClient('mongodb://localhost:27017/')

    第三种用用户密码

    mongoConn = pymongo.MongoClient('mongodb://boss:123456@localhost:27017/')

    操作数据库下的集合

    use_db = mongoConn.数据库

    use_db = mongoConn.mongotest

    获取数据库下要操作的集合

    use_col = use_db.class1804

    文档操作

    def add_data():

    document={

    'name':'liyong',

    'age':20,

    'gender':'男',

    'calss':'1804'

    }

    use_col.insert(document)

    def delete_data():
    result = use_col.delete_one({})

    #默认删除一条
    result = use_col.remove({'name':'liyong'},multi=False)
    

    def update_date():
    #result = use_col.update({'name':'liyong'},{'$set':{'age':30}})
    #更新全部

    result = use_col.update({'name':'liyong'},{'name':'lisi','age':40})

    #更新多条
    

    result = use_col.update_many({'name':'liyong'},{'name':'lisi','age':40})

    #save()
    #1、情况:加入我们更新的文档id存在则修改全文档更新,不存在作为新文档插入
    resule=use_col.save({_id:'5b83725a9e3227192a28178b',address:'beijing'})
    #db.集合名.save({_id:'value',key:value,key:value,.....})
    result = use_col.save()
    

    返回多条

    def find_data():
    #find_one查询时会返回一个字典
    result = use_col.find_one({'name':'liyong'})
    print(result)
    #跳过查询
    result = use_col.find({}).skip(2).limit(4)

    if name == 'main':

    add_data()

    update_date()

    find_data()

    相关文章

      网友评论

          本文标题:mongob复习

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