MEAN全栈工程师-从入门到弃坑第四天之mongodb

了解mongodb,之前没用过nosql类型来做数据库,只用过redis之类的做功能,今天先简单学习一波mongodb的操作

MongoDB 将数据存储在灵活的,类似JSON的文档中,这意味着字段可能因文档而异,并且数据结构可以随时间变化

之前数据库都是用关系型数据库,学这个感觉思想都“升华”了哈哈,介绍还是看官网的好~移步官网mongodb介绍

这波学习的主要是基础命令,然后还有聚合函数,果然一句SQL都没有OAO

接下来就是贴操作!

0.基础命令
    1) 数据库命令
        创建/切换            use 数据库名
        显示所有数据库        show dbs
        显示当前数据库        db
        删除数据库            db.dropDatabase()
        
*    2) 集合命令
        创建                db.createCollection(集合名)
        显示集合列表        show collections/tables
        删除集合            db.集合名.drop()
        
    3) 文档命令
        增加文档          db.集合名.insert(数据)
*        修改                db.集合名.update({查询条件},{修改的目标})    将指定的文档全部改成指定的值                                                                                 db.rtus.update({"worktime":NaN},{$set:{"worktime":0.1}});
                                 db.集合名.update({查询条件},{$set:{"键名":"新的值"}})    只修改指定键名的值
        删除                  db.集合名.remove({查询条件})

1.高级命令
    $gt 大于
        db.集合名.find({"键名":{$gt:值}})
        
    $lt 小于
        db.集合名.find({"键名":{$lt:值}})
        
    $gte 大于等于
        db.集合名.find({"键名":{$gte:值}})
        
    $lte 小于等于
        db.集合名.find({"键名":{$lte:值}})
        
    $ne 不等于
        db.集合名.find({"键名":{$ne:值}})
        
    区间查询
        db.集合名.find({"键名":{$gt:值,$lt:值}})
        
*    $in 在集合中
        db.集合名.find({"键名":{$in:[值]}}) $in后面是 array []
        
    $nin 不在集合中
        db.集合名.find({"键名":{$nin:[值]}}) $nin后面是 array []
            
    $size 值的个数
        db.集合名.find({"键名":{$size:个数}}) 
        
    $exists 是否存在某个键名
        db.集合名.find({"键名":{$exists:true|false}})
        示例    db.man.find({"address":{$exists:false}})

*    $or 或者,多个条件满足一个就可以
        db.集合名.find({$or:[条件1,条件2,……}])
        示例    db.man.find({$or:[{"name":"qiqi"},{"age":18}]})

*    模糊查询,值是正则表达式
        db.集合名.find({})
        示例    db.man.find({"name":/q/})

*    格式化查询
        db.集合名.find({}).pretty()
        示例    db.man.find({"name":/q/}).pretty()
    
    
*2.排序
    db.集合名.find({}).sort({"键名1":1,"键名2",-1});
        1 升序
        -1 降序
    示例    db.man.find({}).sort({"age":1});
    
    
*3.限制输出
    1)limit(n) 限制输出n条
        db.集合名.find().limit(n);
        示例    年龄升序前三条
            db.man.find({}).sort({"age":1}).limit(3);
        
    2)    skip(n) 跳过n条输出
        db.集合名.find().skip(n);
        示例    跳过3条输出2条
        db.man.find({}).sort({"age":1}).skip(3).limit(2);
    
    2个组合常用于分页,skip 优先级比 limit 高
    
4.聚合函数(aggregate    
    1) 核心语法:
            db.集合名.aggregate([
                {管道1:{表达式}},
                {管道2:{表达式}},
                {管道3:{表达式}}
            ]);
    
    
    2)$group    分组
            db.集合名.aggregate(
                {$group:
                    {
                    _id:'$字段名',
                    别名:{聚合函数:'$字段名'}
                    }
                }    
            );
            
            示例:统计每个年龄段的总人数
            db.man.aggregate(
                {$group:
                    {
                    _id:'$age',
                    count:{$sum:1}
                    }
                }    
            );
        
            示例:统计每个年龄段的人数名单
            db.man.aggregate(
                {$group:
                    {
                    _id:'$age',
                    count:{$sum:1},
                    名单:{$push:'$name'}    $push:把每一组数据拼接成一个数组
                    }
                }    
            );
        
    3) match 管道,匹配条件
    
        db.集合名.aggregate({
            $match:{"键名":{$gt:18}}
        });
        
        示例:
        
        age等于19的人
        db.man.aggregate({
            $match:{"age":19}
        });
        
        统计每个年龄段的人数名单
            db.man.aggregate([
                {$match:{"age":19}},
                {$group:
                    {
                    _id:'$age',
                    count:{$sum:1},
                    名单:{$push:'$name'}    
                    }
                },
                $sort:{age:1}
                
            ]);

    4)    $project 管道,限定输出字段
    
        db.集合名.aggregate({
            $project:{
                name: 1|0 //1显示,0不显示
            }
        });
        
        示例:
        
        只显示名字和年龄
        db.man.aggregate({
            $project:{_id:0,age:1,name:1}    //_id不写默认显示,其他不写默认不显示
        });
        
    5)    $sort 排序,$skip 跳过 ,$limit 限制输出
            
        
            db.集合名.aggregate({
                $sort:{
                    'name': 1|-1 
                }
            });
            
            db.集合名.aggregate({
                $skip:n
            });
            
            db.集合名.aggregate(
                {$limit:n}    限制输出n条
            );
            
        
            示例:
            db.man.aggregate(
                {$limit:3}
            );
            示例:
            
            db.man.aggregate([
                    
                    {$group:
                        {
                        _id:'$age',
                        count:{$sum:1},
                        名单:{$push:'$name'}    
                        }
                    },
                    {$sort:{'age':1}},
                    {$skip:2},
                    {$limit:3}
                    
            ]);
            
    6)    $unwind 管道,将数组字段进行拆分,每个值为每一条数据
            db.集合名.aggregate({
                $unwind:'键名'
            });
            
            示例:
            db.man.aggregate({
                $unwind:'$interset'
            });
            

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值