Mongodb資料查詢 | Mongodb

來源:互聯網
上載者:User

標籤:統計   IV   ESS   pre   avg   lan   並且   表達   path   

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    # 使用 // 或 $regex 編寫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}})

  

Mongodb資料查詢 | Mongodb

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.