MongoDB 记录

查询操作:
    db.stu.find() //查询所有数据
    db.stu.findOne() //查询一个数据
    db.stu.find().pretty() //查询之后,格式化显示
    db.stu.find({title:'html'}) //查询title为html的
    db.stu.find({age:{$gte:18}}) //查询年龄大于等18的学生

    逻辑与
    db.stu.find({title:'python',count:{$gt:2}}) //查询title为python并且count大于2的

    逻辑或
    db.stu.find({$or:[{title:'python'},count:{$gt:2}]})//查询title为python 或者count大于2

    in 或者 not in
    db.stu.find({count:{$in:[1,2]}}) //查找count为1或者2的
    db.stu.find({count:{$nin:[1,2]}}) //查找count不1或者2的

    支持正则表达式
    db.stu.find({name:/^/}) //查找名字以黄开头的 与js正则一样
    db.stu.find({name:{$regex:"^黄"}}) //与上面等价

    自定义查询函数(js函数)
    db.stu.find({$where:function(){return this.age>20}})//与js一样,返回age大于20的数据
    db.stu.find({$where:function(){return this.name.startwith('')}})//中间的函数是js代码,也就是说js字符串的函数都能被使用


    limit用于读取指定数量的文档
    skip用于跳过指定数量的文档
    db.stu.find().limit(5) //读取返回的5条数据
    db.stu.skip(2) //跳过2条数据,也就是从第三条数据开始显示

    db.stu.skip(5).limit(5)//跳过前5条,从第6条开始显示接下来的5条数据

    投影:查询结果中,只返回选择的字段
            如:一个文档有5个字段,只显示前面3个
    db.stu.find({查询条件},{name:1})//默认情况下_id是显示的,不想其显示,可以将_id设置为0
    name:1说明显示name字段
    db.stu.find({},{_id:0,name:1,age:1})//显示name和age


    排序
    默认排序是根据objectid进行的
    sort{属性a:1,属性b:-1}
    1为升序,-1降序
    db.stu.find().sort({age:1})
    db.stu.find().sort({age:-1})//按照age降序排序

    统计个数
    count()
    db.stu.find({条件}).count()
    db.stu.find({age:{$gt:20}}).count()//查询年龄大于20
    db.stu.count({age:{$gt:20}}) //查询年龄大于20

    数据去重
    db.stu.distinct('去重字段',{条件})
    db.stu.distinct('gender',{age:{$gt:20}})//对gender进行去重

    聚合(用于统计)
        主要计算数据
    db.集合.aggregate([{管道:{表达式}}]) 
        常用管道:
            $group:将集合中文档分组
            $match:过滤数据
            $project:修改输入文档的结构,如重命名,增加删除字段,创建计算结构
            $sort:将输入文档排序后输出
            $limit:限制聚合管道返回的文档数
            $skip:跳过指定文档的数量
            $unwind:将数组类型的字段进行拆分
        表达式
            语法:    '$列名'

            常用表达式
                    $sum
                    $avg
                    $min $max
                    $push
                    $first $last

        db.stu.aggregate([
                {
                    $group:{
                        _id:'$gender',//基于哪个字段进行分组.这里是基于gender进行分组
                        # _id:null,//将整个集合文档分为一组
                        # counter:{$sum:1}//counter为结果的名字,$sum计算分组中的个数
                        # counter:{$sum:'$age'},
                        # counter:{$first:'$gender'},
                        # counter:{$push:'$age'},//将分组的结果放到数组中(只存放每个文档的age属性)
                        # counter:{$push:'$$ROOT'},//将分组的结果放到数组中(将整个文档push到数组中)
                    }
                }
            ])

        db.stu.aggregate([
                {
                    $match:{age:{$gt:20}, //查询年龄大于20},
                    $group:{
                        _id:"$gender",
                        counter:{$sum:'$age'}   //把查询年龄大于20,作为分组的下一次数据
                    }
                }
            ])

        db.stu.aggregate([
                {$match:{age:{$gt:20}, //查询年龄大于20}}
                {$group:{
                        _id:"$gender",
                        counter:{$sum:'$age'}   //把查询年龄大于20,作为分组的下一次数据
                    }},
                {$project:{_id:0,counter:1}},
            ])

        db.stu.aggregate([
                {$match:{age:{$gt:20}, //查询年龄大于20}}
                {$group:{
                        _id:"$gender",
                        counter:{$sum:'$age'}   //把查询年龄大于20,作为分组的下一次数据
                    }},
                {$project:{_id:0,counter:1}},
                {$sort:{counter:1}},
            ])

        db.stu.aggregate([
                {$match:{age:{$gt:20}, //查询年龄大于20}}
                {$group:{
                        _id:"$gender",
                        counter:{$sum:'$age'}   //把查询年龄大于20,作为分组的下一次数据
                    }},
                {$project:{_id:0,counter:1}},
                {$sort:{counter:1}},
                {$skip:1},//跳过去1个
            ])

        db.stu.aggregate([
                {$match:{age:{$gt:20}, //查询年龄大于20}}
                {$group:{
                        _id:"$gender",
                        counter:{$sum:'$age'}   //把查询年龄大于20,作为分组的下一次数据
                    }},
                {$project:{_id:0,counter:1}},
                {$sort:{counter:1}},
                {$skip:1},//跳过去1个
                {$limit:1},//取出一个
            ])

        db.stu.insert({_id:1,title:'t-shirt',size:['M','L','S']})
        db.stu.aggregate([
                {$unwind:'$size'}//将size字段进行拆分
                #{_id:1,title:'t-shirt',size:'M'}
                #{_id:2,title:'t-shirt',size:'L'}
                #{_id:3,title:'t-shirt',size:'S']}
            ])
        拆分遇到null 空 没有 三种情况会出现数据丢失,解决办法

        db.stu.insert({_id:1,title:'t-shirt',size:[]})
        db.stu.insert({_id:2,title:'t-shirt'})
        db.stu.insert({_id:3,title:'t-shirt',size:null})
        db.stu.aggregate([
                {$unwind:{path:'$size',preserverNullAndEmptyArrays:true}}//将size字段进行拆分    
            ])


        

    采用角色-用户-数据管理方式
    常用系统角色:
        root:超级权限
        read:允许用户读
        readwrite:允许读写
    常见超级管理员
    use admin
    db.createUser({
        user:"admin",
        pwd:'123',
        roles:[{role:'root',db:'admin'}]
        })
    默认没有授权,要修改配置文件
    mongo -u admin -p 123 --authenticationDatabase test1


    流程:
        创建超级管理员
        修改配置文件,启用身份验证
        重启服务
        使用超级管理员登陆
        创建普通用户
        使用普通用户登录

    复制(副本集)
        工作原理
        设置复制

 

转载于:https://www.cnblogs.com/vipchenwei/p/7714434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值