日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mongodb基本指令与高级查询指令以及聚合命令

發布時間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb基本指令与高级查询指令以及聚合命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、MongoDB中關于database的基本指令

1 ###關于database的基本指令 2 #查詢當前使用的數據庫指令 3 db 4 5 #查詢所有的數據庫指令 6 show dbs#或者:show databases 7 8 #切換數據庫指令 9 use db_name 10 11 #刪除當前數據庫指令 12 db.dropDatabase()

二、MongoDB中關于集合的創建及基本增刪改查指令

1、集合創建(集合相當于mysql里的表)

1 ###不手動創建集合 2 #向不存在的集合中第一次加入數據時,集合會被創建出來 3 4 ###手動創建集合 5 db.createCollection(name,options) 6 7 #例如創建集合test 8 db.createCollection(test) 9 10 db.createCollection(test,{capped:true,size:10}) 11 #參數capped:默認值為false表示不設置上限,值為true表示設置上限;參數size:當capped值為true時,需要指定此參數,表示上限大小,當文檔達到上限時,會將之前的數據覆蓋,單位為字節 12 13 #查看集合 14 show collections 15 16 #刪除集合 17 db.collection_name.drop()

2.集合中的數據類型

  1、Object ID :文檔ID

  2、String:字符串,最常用,必須是有效的UTF-8  

  3、Boolean:存儲一個布爾值,True或false

  4、integer:整數可以是32位或64位,取決于服務器

  5、Double:存儲浮點值

  6、Arrays:數據或列表,多個值存儲到一個鍵

  7、Object:用于嵌入式的文檔,即一個值為一個文檔

  8、Null:存儲Null值

  9、Timestamp:時間戳,表示從1970-1-1到現在的總秒數

  10、Date:存儲當前日期或時間的UNIX時間格式

  注:每個文檔都有一個屬性,為_id,保證每個文檔的唯一性,

    可以自己去設置_id插入文檔,如果沒有提供,那么MongoDB為每個文檔提供了一個獨特的_id,類型為Object ID

    Object ID是一個12字節的十六進制數:

        前4個字節為當前時間戳

        接下來3個字節為機器ID

        接下來的2個字節為MongoDB的服務器進程id

        最后3個字節為簡單的增量值

    創建日期語句如下:參數的格式為YYYY-MM-DD,具體指令為:

new Date("2017-12-20")

3、插入數據

插入文檔時,如果不指定_id參數,MongoDB會為文檔分配一個唯一的Objectid

1 db.collection_name.insert(document) 2 3 db.test.insert({name:"gi",gender:1})#向test集合插入數據{name:"gi",gender:1} 4 5 db.test.insert({_id:"20181125",name:"gi",gender:1})#向test集合插入數據{_id:"20181125"name:"gi",gender:1}

?

1 ###Mong0DB插入數據 2 db.collection.insert({})#插入數據,“_id”存在就報錯 3 db.collection.save({})#插入數據,如果文檔的“_id”存在就會更新數據,如果文檔的“_id”不存在則添加數據

4、刪除數據

db.集合名稱.remove(<query>,{justOne:<boolean>})

  參數query:可選,刪除的文檔的條件

  參數justOne:可選,如果設為True或1,則只刪除一條,默認false,表示刪除多條

1 ###MongDB刪除數據 2 db.test.remove({name:"xiaowang"},{justOne:true}) 3 #默認情況會刪除所有滿足條件的數據,{justOne:true}能達到只刪除一條的效果

5、更新數據

指令:db.集合名稱。update(<query>,<update>,{multi:<boolean>})

  參數query:查詢條件

  參數update:更新操作符

  參數multi:可選,默認是false,表示只更新找到的第一條記錄,值為True表示把所有滿足條件的文檔全部更新。

注意:“multi update only works with $ operators”(multi 只和$一起使用)

1 ###MongoDB更新數據 2 db.test.update({name:"xiaoming"},{name:"xiaozhang"}) 3 #把名字為xiaoming的數據替換為{name:"xiaozhang"},注意此時是整條數據被替換成{name:"xiaozhang"} 4 5 db.test.update({name:"xiaoming"},{$set:{name:"xiaozhang"}}) 6 #把name為xiaoming的數據name值更新為xiaozhang,注意此時只是這條數據的name被更新了,其他不變,且只更新數據集中的符合條件的第一條數據 7 8 db.test.update({name:"xiaoming"},{$set:{name:"xiaozhang"}},{multi:true}) 9 #{multi:true}可以達到更新多條數據的目的

6、查詢數據

  1、方法find():查詢

      db.集合名稱.find({條件文檔})

  2、方法findOne():查詢,只返回第一個

      db.集合名稱.findOne({條件文檔})

  3、方法pretty():將結果格式化

      db.集合名稱.find({條件文檔}).pretty()

7、高級查詢

  1、比較運算符

    等于:默認是等于判斷,沒有運算符

    小于:$it? ? (less than)

    小于等于:$ite? ?(less than equal)

    大于:$gt? ?(greater than)

    大于等于:$gte? ? ?(greater than equal)

    不等于:$ne

db.test.find({age:{$gte:18}}) #test中年齡大于等于18的記錄

  2.范圍運算符

    使用“$in”,"$nin"判斷是否在某個范圍內

db.test.find({age:{$in:[18,28,38]}}) #查詢年齡為18,28,28的test中的記錄

  3、邏輯運算符

    and:在json中寫多個條件即可

db.test.find({age:{$gte:18},gender:true}) #查詢年齡大于或等于18,并且性別為true的學生

    or:使用$or,值為數組,數組中每個元素為json

db.test.find({$or:[{age:{$gt:18}},{gender:false}]}) #查詢年齡大于18,或性別為false的學生 db.test.find({$or:[{age:{$gte:18}},{gender:true}],name:"gi"}) #查詢年齡大于18或性別為男生,并且姓名為“gi”

  4、正則表達式

    使用//或$regex編寫正則表達式

db.test.find({sku:/^abc/}) #sku標簽中以abc開頭的記錄db.test.find({sku:{$regex:"789$"}}) #sku標簽中以789$結尾的記錄

  5、limit和skip

    方法limit():用于讀取指定數量的文檔

      db.集合名稱.find().limit(NUMBER)

db.test.find().limit(2) #查詢test集合中的前兩條記錄

    方法skip():用于跳過指定數量的文檔

      db.集合名稱.find().skip(NUMBER)

db.test.find().skip(2) #跳過test集合中的前兩條數據,

    同時使用skip和limit(可實現翻頁功能)(一般先使用skip,再使用limit,這樣效率高)

db.test.find().skip(2).limit(2)db.test.find().limit(3).skip(2)

  6、自定義查詢

    使用$where后面寫一個函數,返回滿足條件的數據

#查詢年齡大于30 的學生 db.test.find({$where:function(){return this.age>30;}})

  7、投影

    在查詢到的返回結果中,只選擇必要的字段

      db.集合名稱。find({},{字段名稱:1,...})

    參數為字段與值,值為1表示顯示,值為0表示不顯示

    特殊:對于_id列默認是顯示的,如果不顯示需要明確設置為0

#test輸出只顯示name列和gender列 db.test.find({},{_id:0,name:1,gender:1})

  8、排序

    方法sort(),用于對集合進行排序

      db.集合名稱.find().sort({字段:1,...})

    參數1為升序排列

    參數-1為降序排列

#根據性別降序,在根據年齡升序 db.test.find().sort({gender:-1,age:1})

  9、統計個數

    方法count()用于統計結果集中文檔條數

      db.集合名稱.find({條件}).count()

      db.集合名稱.count({條件})

db.test.find({gender:true}).count()db.test.count({age:{$gt:20},gender:true})

  10、消除重復

    方法distinct()對數據進行去重

      db.集合名稱.distinct("去重字段":{條件})

db.test.distinct("hometown",{age:{$gt:18}})

?8、聚合

聚合(aggregate)是基于數據處理的聚合管道,每個文檔通過一個由多個階段(stage)組成的管道,可以對每個階段的管道進行分組、過濾、等功能,然后經過一系列的處理,輸出相應的結果。

  db.集合名稱。aggregate({管道:{表達式}})

常用管道:

在MongoDB中,文檔處理完畢后,通過管道進行下一次處理,常用管道如下:

  $group:將集合中的文檔分組,可以用于統計結果

  $match:過濾數據,只輸出符合條件的文檔

  $project:修改輸入文檔的結構,如重命名、增加、刪除字段、創建計算結果

  $sort:將輸出文檔排序后輸出

  $limit:限制聚合管道返回的文檔書數

  $skip:跳過指定數量的文檔,并返回余下的文檔

  $unwind:將數組類型的字段進行拆分

表達式

處理輸入文檔并輸出

語法:表達式:“$列名”

常用表達式

  $ sum:計算總和,$sum:1表示以一倍計數

  $avg:計算平均值

  $min:獲取最小值

  $max:獲取最大值

  $push:在結果文檔中插入值到一個數組中

  $first:根據資源文檔的排序獲取第一個文檔數據

  $last:根據資源文檔的排序獲取最后一個文檔數據

?

$group對應的字典中有幾個鍵,結果中就有幾個鍵

分組依據需要放在_id后面

取不同的字段的值需要使用$,"$age"、“$gender”

取字典嵌套的字典中的值的時候“$_id.country”

能夠同時按照多個建進行分組“{$group:{_id:{country:$country,province:"$province"}}}”

  結果是:{_id:{country:"",province:""}}

#統計男生、女生總人數 db.test.aggregate({¥group:{_id:"$gender",counter:{$sum:1}}}) #Group by null #將所有文檔分為一組 #求學生總人數、平均年齡 db.test.aggregate({$group:{_id:null,counter:{$sum:1},avgAge:{$avg:"$age"}}})

$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}}) db.stu.aggregate({$group:{_id:"$gender",count:{$sum:1},aug_age:{$avg:$age}}},{$project:{gender:"$_id",count:"$count",avg_age:"$avg_age"}})

$match:過濾數據,只輸出符合條件的文檔

#查詢年齡大于20 的學生 db.test.aggregate({$match:{age:{$gt:20}}}) #查詢年齡大于20 的男生、女生人數 db.test.aggregate({$match:{age:{$gt:20}}},{$group:{_id:"$gender",counter:{$sum:1}}})

?$sort:將輸出文檔排序后輸出

#查詢學生信息,按年齡升序 db.stu.aggregate({$sort:{age:1}}) #查詢男生和女生人數,按人數的降序排序 db.stu.aggregate({$group:{_id:"gender",count:{$sum:1}}},{$sort:{count:-1}})

$limit:限制聚合管道返回的文檔書數

#顯示前兩條記錄 db.test.aggregate({$limit:2})

$skip:跳過指定數量的文檔,并返回余下的文檔(一般先使用skip,再使用limit

#跳過指定2條數量記錄 db.test.aggregate({$skip:2})

$unwind:將數組類型的字段進行拆分

  db.集合名稱.aggregate({$unwind:"$字段名稱"})

db.test.insert({_id:1,item:"t-shirt",size:["S","M","L"]}) db.test.aggregate({$unwind:"$size"})

結果如下:

{“_id”:1,"item":"t-shirt","size":"S"}

{“_id”:1,"item":"t-shirt","size":"M"}

{“_id”:1,"item":"t-shirt","size":"L"}

屬性perserveNullAndEmptyArrays,值為false表示丟棄屬性值為空的文檔

屬性perserveNullAndEmptyArrays,值為true表示保留屬性值為空的文檔

用法:db.test.aggregate({$unwind:{path:"$size",perserveNullAndEmptyArrays:true}})

#perserveNullAndEmptyArrays:true #防止數據丟失

轉載于:https://www.cnblogs.com/zhiliang9408/p/10013958.html

總結

以上是生活随笔為你收集整理的mongodb基本指令与高级查询指令以及聚合命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。