1. 程式人生 > >MEAN全棧工程師-從入門到棄坑第四天

MEAN全棧工程師-從入門到棄坑第四天

瞭解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.集合名.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/})
    
    
*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'
            });