Mongodb數據查詢 | Mongodb

1.基本查詢
    ①方法find():查詢
        db.集合名稱.find({條件文檔})
    ②方法findOne():查詢,只返回第一個
        db.集合名稱.findOne({條件文檔})
    ③方法pretty():將結果格式化
        db.集合名稱.find({條件文檔}).pretty()
2.比較運算符
    # 等於,默認是等於判斷,沒有運算符
    # 小於,$lt   less-than
    # 小於或等於,$lte   less-than,equal
    # 大於,$gt    greater-than
    # 小於或等於,$gte    greater-than,equal
    # 不等於,$ne    not equal  
        db.collection2.find({name:'郭靖'})
        db.collection2.find({age:{$gte:18}})
3.邏輯運算符
    ①邏輯與
        # 默認是邏輯與的關係
        # 例:查詢年齡大於或等於18,而且性別爲true的學生
            db.collection2.find({age:{$gte:18}, gender:true})
    ②邏輯或
        # 使用$or,值爲數組,數組中每一個元素爲json
        # 例:查詢年齡大於18,或性別爲false的學生
            db.collection2.find({$or:[{age:{$gt:18}},{gender:false}]})
        注意點:find() >> 或條件下的{} >> $or[ ] >>
        >>  {條件a},{條件b} >> {域:{ 邏輯符判斷} }
    ③或、與共用
        # 例:查詢年齡大於18或姓名是郭靖,而且性別爲男生
            db.collection2.find( {$or:[ {age:{$gt:18} },{name:'郭靖'} ],gender:true} )
4.範圍運算符
    # $in|$nin
    # 例:查詢年齡爲18,28的學生
        db.collection2.find( {age:{$in:[18, 28] } } )
    # 這裏要注意了,最大與最小都須要表中含有這幾個數
5.支持正則表達式
    # 使用 // 或 $regex 編寫正則表達式
    # 例:db.collection2.find( {name:/^黃/} )
        db.collection2.find( {name:{$regex:'^黃'} } )
6.自定義查詢
    # 使用$where後面寫一個函數,返回知足條件的數據
    # 例:查詢大於30歲的學生
        db.collection2.find(
        {
        $where: function(){
        return this.age > 18
        }})
7.Limit和Skip
    ①方法limit():讀取指定數量的文檔
        # db.集合名稱.find().limit(NUMBER)
        db.collection2.find().limit(2)
        # 附:若是指定參數則顯示集合中的全部文檔
    ②方法skip():用於跳過指定數量的文檔
        # db.集合名稱.find().skip(NUMBER)
        db.stu.find().skip(2)
        # 附:參數NUMBER表示跳過的記錄條數,默認爲0
    ③limit()與skip()一塊兒使用
        # 不分前後順序;跳過指定數量文檔,再讀取指定數量的文檔
        # 查詢數據
        db.collection1.find().limit(4).skip(5)
        db.collection1.find().skip(5).limit(4)
8.投影
    --選擇字段顯示數據
        # ①db.集合名稱.find({},{ 字段名稱:1, ...})
        db.collection2.find({},{name:1, gender:1})
        # '1':表示顯示字段,不設置表示不顯示
        # ②特殊:對於_id列默認是顯示的,
        # 若是不顯示須要明確設置爲0
        db.collection2.find({},{_id:0,name:1,gender:1})
9.排序
    --對結果集進行排序
        參數1爲升序排列
        參數-1位降序排列
    # db.集合名稱.find().sort({字段:1....})
    # --根據性別降序,再根據年齡升序
        db.collection2.find().sort({gender:-1,age:1})
10.統計個數
    ①方法count():用於統計結果集中文檔條數
        1.db.集合名稱.find({條件}).count()
        db.collection2.find({gender:true}).count()
        # --統計男生人數

        2.db.集合名稱.count({條件})
        db.collection2.count({age:{$gt:20}, gender:true})
        # --統計年齡大於20的男生人數
11.消除重複
    ①方法distinct():對字段數據進行去重,提取
    --db.集合名稱.distinct('去重字段',{條件})
    db.collection2.distinct('hometown',{age:{$gt:18}})
    # 查詢年齡大於18歲的學生,來自哪些省份

# 4.聚合查詢
1.基本語法
    --語法
    db.集合名稱.aggregate( {管道: {表達式} } )
    附:
        1.管道:在Unix和Linux中通常用於將當前命令的
        輸出結果做爲下一個命令的輸入
        2.表達式:處理輸入文檔並輸出
2.經常使用表達式
    $sum: 計算綜合,$sum:1 表示以一倍計數
    $avg: 計算平均值
    $min: 獲取最小值
    $max: 獲取最大值
    $push: 在結果文檔中插入值到第一個文檔數據
    $first: 根據資源文檔的排序獲取第一個文檔數據
    $last: 根據資源文檔的排序獲取最後一個文檔數據
3.經常使用管道
    ①$group
        --將集合中的文檔分組,可用於統計結果
        --_id表示分組的依據,使用某個字段的格式爲'$字段'
            # 統計男生、女生的總人數
            db.stu.aggregate(
                {$group:
                    {
                        _id:'$gender',
                        counter:{$sum:1}
                    }
                }
            )
        --透視數據
            # 統計學生性別及學生姓名
            db.stu.aggregate(
                {$group:
                    {
                        _id:'$gender',
                        name:{$push:'$name'}
                    }
                }
            )
        --使用$$ROOT能夠將文檔內容加入到結果集的數組中
            db.stu.aggregate(
                {$group:
                    {
                        _id:'$gender',
                        name:{$push:'$$ROOT'}
                    }
                }
            )
    ②$match
        --修改輸入文檔的結構,如重命名、增長、刪除字段、建立計算結果
        --用於過濾數據,只輸出符合條件的文檔
        --使用MongoDB的標準查詢操做
        # 查詢年齡大於20的學生
        db.stu.aggregate(
            {$match:{age:{$gt:20}}}
        )

        # 查詢年齡大於20的男生、女生人數
        db.stu.aggregate(
            {$match:{age:{$gt:20}}},
            {$group:{_id:'$gender',counter:{$sum:1}}}
        )
    ③$project
        --修改輸入文檔的結構,
           如重命名、增長、刪除字段、建立計算結果
        # 查詢學生的姓名、年齡
        db.stu.aggregate(
            {$project:{_id:0,name:1,age:1}}
        )

        # 查詢男生、女生人數,輸出人數
        db.stu.aggregate(
            {$group:{_id:'$gender',counter:{$sum:1}}},
            {$project:{_id:0,counter:1}}
        )
    ④$sort
        --將輸入文檔排序後輸出
        # 查詢學生信息,按年齡升序
        b.stu.aggregate({$sort:{age:1}})

        # 查詢男生、女生人數,按人數降序
        db.stu.aggregate(
            {$group:{_id:'$gender',counter:{$sum:1}}},
            {$sort:{counter:-1}}
        )
    ⑤$limit和$skip
        --$limit
        # 限制聚合管道返回的文檔數
        # 查詢2條學生信息
            db.stu.aggregate({$limit:2})

        --$skip
        # 跳過指定數量的文檔,並返回餘下的文檔
        # 查詢從第3條開始的學生信息
            db.stu.aggregate({$skip:2})

        # 統計男生,女生人數,按人數升序,取第2條數據
            db.stu.aggregate(
                {$group:{_id:'$gender', counter:{$sum:1}}}
                {$sort:{counter:1}}
                {$skip:1}
                {$limit:1}
            )
    ⑥$unwind字段拆分查詢
        --語法
        --文檔中一個數組字段含有多個值
        --根據字段下的值拆分多條
        --每條包含數組中的一個值
           
        --db.集合名稱.aggregate({$unwind:'$字段名稱'})
            # $unwind聚合方法下含有兩個屬性:
                path:'$字段名稱'
                preserveNullAndEmptyArrays:<布爾值>
            # 不填寫屬性,默認表示<布爾值>爲false
            # 且不用標記屬性名
        --構造數據
            db.t3.insert([
            { "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] },
            { "_id" : 2, "item" : "b", "size" : [ ] },
            { "_id" : 3, "item" : "c", "size": "M" },
            { "_id" : 4, "item" : "d" },
            { "_id" : 5, "item" : "e", "size" : null }
            ])
        --查看查詢結果,顯示對空數組,無字段,null的文檔
            db.t3.aggregate( { $unwind:{ path:'$size', preserveNullAndEmptArrays:true}})

        --查看查詢結果,不顯示空數組,無字段,null的文檔
            db.t3.aggregate({$unwind: '$size'})  至關於:
            db.t3.aggregate({$unwind:{path:'$size', preserveNullAndEmptyArrays:false}})
相關文章
相關標籤/搜索