Mongodb--day02

前情回顾:
    1.关系型数据库和非关系型数据库的比较
        *不是关系模型构建的数据结构,不保证数据的一致性,结构更加灵活自由
        *非关系型数据库弥补了关系型数据库在处理高并发存储时读写效率低的问题
        *非关系型数据库种类多样,技术不如关系型数据库成熟,没有统一的操作语句,处于不断发展更新阶段
    2.mongodb特点 ,安装,基本设置
    3.创建数据库
        use database

        db.dropDatabase() 删除数据库
        show dbs   查看数据库

        mongodump       备份
        mongorestore    恢复

        mongostat       数据库监测
        mongotop        数据库读写时长
    
    4.集合操作
        db.createCollection()      创建集合
        db.collection.insert()     创建集合
        db.getCollection()          获取集合对象
        db.collection.renameCollection()    集合重命名
        show collections/tables            集合查看

    5.插入文档
        insertOen()
        insertMany()
        insert()
        save()

    6.查找操作
        find(query,filed)
        findOne()

-----------------------------------------------------------------------
query的筛选功能

操作符:使用$符号注明的一个有特殊意义的字符串,用以表达丰富的含义
        比如:$lt 表示小于

比较操作符:
    $eq 等于 =

         年龄等于17
        db.class0.find({age:{$eq:17}},{id:0})

    $lt 小于
        年龄小于17
        db.class0.find({age:{$lt:17}},{id:0})

        姓名小于Tom(字符串也可以比较大小)
        db.class0.find({name:{$lt:'Tom'}},{id:0})

    $gt 大于
        db.class0.find({age:{$gt:20}},{id:0})

        条件文档中可以有多个键值对,多个键值对为并,且关系
        db.class0.find({age:{$gt:16,$lt:19}},{_id:0})

    $lte 小于等于   <=
    $gte 大于等于   >=
    $ne  不等于    !=
   
    $in 包含
        查找年龄等于16或18或20的文档
          db.class0.find({age:{$in:[16,18,20]}},{_id:0})
    
    $nin  不包含
        db.class0.find({age:{$nin:[17,19,21]}},{_id:0})

逻辑操作符
    表示逻辑与
        1.在query文档中逗号隔开的多个键值对即表示与关系
            年龄等于17,性别为女
            db.class0.find({age:17,sex:'w'},_id:0)
        
        2.$and  表示逻辑与
            db.class0.find({$and:[{age:17},{sex:'w'}]},{_id:0})

        3.表示逻辑或 $or
            年龄小于17,或者性别为女
            db.class0.find({$or:[{age:{$lt:17}},{sex:'w'}]},{_id:0})
            
        4.表示逻辑非 $not
            db.class0.find({age:{$not:{$gt:17}}},{_id:0})

        5.表示逻辑  既不也不    $nor    not (A or B)
            既不是男的年龄不大于18
            db.class0.find({$nor:[{sex:'m'},{age:{$gt:18}}]},{_id:0})

    练习:    条件混合
            年龄大于18或者小于17,并且要求性别为女
            db.class0.find({$or:[{age:{$gt:18}},{age:{$lt:17}}],sex:'w'})

            年龄大于等于17的男性获者姓名为王八蛋
            db.class0.find($or:[{age:{$gte:17},sex:'m'},{name:'王八蛋'}],{_id:0})
        
        数组类型查找
            数组:一组数控的有序集合,使用[]表示
            *有序的
            *数据类型不相同
        
        查找数组中包含某一项
            e.g.    查找soore 数组中包含90的文档
            db.class3.find({score:90},{_id:0})
        
        查找数组中同时包含多项 $all
            查找score数组中同时包含78,90的文档
            db.class3.find({score:{$all:[78,90]}},{_id:0})

        根据数组项数查找    $size
            db.class3.find({score:{$size:3}},{_id:0})
        
        选择数组的查询部分  $slice
        e.g.    显示数组的前两项
            db.class3.find({name:'小白'},{_id:0,score:{$slice:2}})

            跳过数组第一项显示后面两项
            db.class3.find({name:'小白'},{_id:0,score:{$slice:[1,2]}})
        
        其他查找操作符
        $exists 判断一个域是否存在,
            db.class0.find({sex:{$exists:false}},{_id:0})
                 
        $mod 通过除数余数筛选文档
            db.class0.find({age:{$mod:[2:1]}},{_id:0})

        $type 根据数据类型筛选
            查找name数据类型为'2'的文档, 代表字符串
            db.class0.find({name:{type:2}},{_id:0})

            double:1
            string:2
        *可以通过查看www.mongodb.com下的docs文档查找新的操作符使用方法

数据处理函数
    db.collection.distinct(filed)
    功能:获取集合中某个域取值范围
        查看class0中age域的取值范围
        db.class0.distinct('age')
    
    pretty()
    功能:将find查找结果格式化显示

    limit(n)
    功能:限制显示前n条文档

        显示查找结果前三条文档
        db.class0.find({},{_id:0}).limit(3)
    
    skip(n)
        功能:跳过前n条文档,显示后面的文档内容

            跳过查找结果前3条内容显示后端的文档内容
            db.class0.find.skip(3)


    count()
            功能:对查找结果进行统计
            统计年龄等于17的文档(使用count query参数要筛选条件)
            db.class0.find({age:17},{_id:0}).count()
    
    sort({filed:1/-1})
        功能:对查找结果按照指定的域排序显示  1升序   -1降序
           
           按年龄升序排列
            db.class0.find({},{_id:0}).sort({age:1})     

    *复合排序:对多个域进行排序,当第一排序项相同时,参考第二排序项排序,依次类推
        db.class0.find({},{_id:0}).sort({age:1,name:1})

    函数可以连续调用
        查找年龄最大的三位同学文档信息
            db.class0.find({},{id:0}).sort({age:-1}).limit(3)

    *对筛选的文档集合,可以使用索引序号取某一项

    通过序列号1取到筛选结果的第二项
    db.class0.find({},{_id:0}).sort({age:-1})[1]

文档删除操作
    mysql: delete from table where ...

    mongo:  db.collection.deleteOne(query)

        功能:删除符合条件的第一个文档
        参数:筛选条件   用法同find query

        删除第一个性别为男的文档
        db.class1.deleteOne({sex:'m'})

    db.collection.deleteMany(query)
        功能:删除所有符合条件就的文档
        参数:筛选条件   用法同find query
            
            db.class2.deleteMany({sex:'m'})
        *如果筛选条件为空则表示删除集合中所有文档

db.collection.remove(query,justOne)
    功能:删除文档
    参数:query 筛选条件 用法同find query 
    justOne 默认为false 此时remove用法同deleteMany
            如果为True,此时remove用法同deleteOne

    删除第一个年龄为17岁的一个文档(当第二个参数为false时表示删除所有符合条件文档)
    db.class0.remove({age:17},true)

db.collection.findOneAndDelete(query)
    功能:查找某个文档并删除
    参数:query
    返回:显示出查找到的文档

        查找不存在sex域的文档
         db.class0.findOneAndDelete({sex:{$exists:false}})

练习:
    1创建数据库 名字grade

    2.在数据库中创建集合class

    3.在集合中插入数据若干(8条左右)格式如下
        {name:xxx,age:10,sex:'m',hobby:['draw','dance']}
        年龄7-14
        hobby :draw dance running   sing  football  basketball  computer

    4.查找练习
        查看班级所有人信息
            db.class.find({},{_id:0})
        查看班级中年龄为9岁的人员信息
            db.class.find({age:9},{_id:0})
        查看年龄大于10岁的学生信息
            db.class.find({age:{$gt:10}},{_id:0})
        查看年龄在8-12岁的学生信息
            db.class.find({age:{$gt:8,$lt:12}},{_id:0})
        查看年龄为9岁且喜欢画画的女生
            db.class.find({age:9},{sex:'w'},{hobby:'draw'},{_id:0})
        查看年龄小于8岁或大于12岁的学生
            db.class.find({$or:[{age:{$gt:12}},{age:{$lt:8}}]})
        找到年龄为9岁或者11岁的学生
            db.class.find({age:{$in:[9,11]}},{_id:0})
        找到有两项爱好的同学
            db.class.find({hobby:{$size:2}})
        找到兴趣爱好有计算机的同学
            db.class.find({hobby:'computer'})
        找到即喜欢画画也喜欢跳舞的同学
            db.class.find({hobby:{$all:['draw','dance']}})
        同学兴趣爱好有三项的学生人数
            db.class.find(hobby:{size:3}).count()
        找到本班年龄第二大的同学
            db.class.find().sort(age:-1).skip(1).limit(1)
        查看本班同学兴趣爱好的涵盖范围
            db.class.distinct('hobby')
        找到本班年龄最小的三个同学
            db.class.find().sort({age:1}).limit(3)
        删除所有年龄大于12或者小于8岁的同学     
            deleteMany({$or:[{age:{$lt:8}},{age:{$gt:12}}]})
---------------------------------------------------------------    
修改文档
mysql: update table set ... where ...

mongo : db.collection.updateOne(query,update,upsert)
        功能:修改第一个符合条件的文档
        参数:query 筛选条件 用法同find
        update 要修改的数据项,需要和修改操作符一同使用
        upsert bool 默认为false 表示如果query没有筛选到文档,则不做任何操作
                    如果设置为true,则如果没有筛选到文档,会根据query update插入新的文档

        将年龄17的第一个文档修改为年龄18
        db.class0.updateOne({age:17},{$set:{age:18}})

        如果query不存在,则会插入新文档
        db.class0.updateOne({name:'Jine'},{$set{age:18}},{upsert:true})

        db.collection.updateMany(query,update,upsert)
        功能:修改所有符合条件的文档
        参数:参数用法同updateOne
            
            修改所有年龄为17的文档为年龄20
        db.class0.updateMany({age:17},{$set:{age:20}})

        db.collection.update(query,update,upsert,multi)
        功能:修改筛选文档
        参数:query 筛选条件
            update 修改内容
            upsert 如果为true则如果query文档不存在可以插入新的文档
            multi  默认为false 表示只能修改一条文档
            设置为True ,表示可以修改多条文档
    
        修改所有不存在sex域的文档年龄为20
        db.class0.update({sex:{$exists:false}},{$set:{age:20}},false,true)

    db.collection.findOneAndUpdate(query,update)
        功能:查找一个文档并修改
        参数:query 查找条件
            update 修改内容
        返回:修改前的文档内容

        查找一个文档并修改年龄为17
        db.class0.findOneAndUpdate({name:'兔子'},{$set:{age:17}})

    db.class0.findOneAndReplace(query,docu)
        功能:查找并替换一个文档
        参数: query
            document:要替换的文档
        返回:返回原有文档内容

        db.class0.findOneAndReplace({abc:123},{name:'Lily',age:19})


将三国使用mongodb进行构建操作
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值