溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MongoDB數(shù)據(jù)庫(kù)常用表達(dá)式有哪些

發(fā)布時(shí)間:2021-12-17 17:22:29 來(lái)源:億速云 閱讀:148 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“MongoDB數(shù)據(jù)庫(kù)常用表達(dá)式有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

聚合(aggregate)

簡(jiǎn)單來(lái)說(shuō)就是將上一次處理的結(jié)果交給下一個(gè)處理,最后一個(gè)處理完輸出

我們將每一次的處理叫做管道。

常用管道有:

$group:分組,用于統(tǒng)計(jì)結(jié)果

$match:用于過(guò)濾數(shù)據(jù)

$project:修改結(jié)構(gòu),重命名,增加,刪除字段,創(chuàng)建計(jì)算結(jié)果等

$sort:排序

$limit:顯示的文檔數(shù)(顯示幾行數(shù)據(jù))

$skip:跳過(guò)前多少數(shù)量的文檔

$unwind:將數(shù)據(jù)類(lèi)型字段拆分


常用表達(dá)式

$sum:求和

$avg:平均值

$min:獲取最小值

$max:獲取最大值

$push:插入一個(gè)數(shù)組

$first:獲取第一個(gè)文檔數(shù)據(jù)

$last:獲取最后一個(gè)文檔數(shù)據(jù)


實(shí)例:

# 按照性別分組,并計(jì)算有多少人

db.stu.aggregate(

{$group:{_id:"$sex",count:{$sum:1}}}

)

輸出:

{ "_id" : "女", "count" : 3 }

{ "_id" : "男", "count" : 3 }

# _id是指定用什么字段分組,需要寫(xiě)成$sex, $sum:1表示此行數(shù)據(jù)計(jì)算為1

# 在上面的基礎(chǔ)上計(jì)算不同性別的平均值

db.stu.aggregate(

{$group:{_id:"$sex",count:{$sum:1},svg_age:{$avg:'$age'}}}

)

輸出:

{ "_id" : "女", "count" : 3, "agv_age" : 22.666666666666668 }

{ "_id" : "男", "count" : 3, "agv_age" : 19.333333333333332 }

# 不進(jìn)行分組,求所有人的數(shù)量和年齡平均值

db.stu.aggregate(

{$group:{_id:null,count:{$sum:1},svg_age:{$avg:'$age'}}}

)

# 在按照性別分組,并計(jì)算有多少人,計(jì)算不同性別的平均值只取count值

# 并且對(duì)count進(jìn)行重命名為sum,不現(xiàn)實(shí)其他

db.stu.aggregate(

{$group:{_id:'$sex',count:{$sum:1},agv_age:{$avg:'$age'}}},

{$project:{sum:'$count',_id:0}}

)

# _id會(huì)默認(rèn)顯示,需要需要給個(gè)0,其他不寫(xiě)則不顯示。

輸出:

{ "sum" : 3 }

{ "sum" : 3 }

# 在上述例子中過(guò)濾sum大于2的

db.stu.aggregate(

{$group:{_id:'$sex',count:{$sum:1},agv_age:{$avg:'$age'}}},

{$project:{sum:'$count',_id:0}}

{$match:{sum:{$gt:2}}}

)

# 排序

# 按照年齡升序,降序就是-1

db.stu.aggregate(

{$sort:{age:1}}

)

# $limit和$skip

# 查詢(xún)兩條消息

db.stu.aggregate(

{$limit:2}

)

# 跳過(guò)前兩條,顯示兩條

db.stu.aggregate(

{$skip:2}

{$limit:2}

)

# $unwind

# 對(duì)數(shù)組拆分

例如插入一條數(shù)據(jù)

db.test1.insert({_id:1,size:[111,222,333]})

# 拆分

db.test1.aggregate(

{$unwind:'$size'}

)

會(huì)輸出:

{"_id":1,"size":111}

{"_id":1,"size":222}

{"_id":1,"size":333}

索引

# 插入1000條數(shù)據(jù),在MongoDB中可以執(zhí)行js腳本的

# 你可以插入更多的數(shù)據(jù)看到更好的效果

for(i=0;i<1000;i++){db.test.insert({name:"test"+i,age:i})}

# 查詢(xún)一條數(shù)據(jù)

db.test.find({name:'test888'})

# 查看查詢(xún)的時(shí)間

db.test.find({name:'test888'}).explain('executionStats')

找到executionTimeMillis,后面就是查詢(xún)的時(shí)間單位是毫秒

# 建立索引

db.test.ensureIndex({name:1})

# 再次執(zhí)行

db.test.find({name:'test888'}).explain('executionStats')

查看時(shí)間,對(duì)比沒(méi)有建立索引時(shí)候的時(shí)間,差距是很大的。

# 查看當(dāng)前集合的索引

db.test.getIndexes()

# 刪除索引

db.test.dropIndex()

例如:db.test.dropIndex({name:1})

# 建立索引如果不想有重復(fù)的值可以指定唯一性

# 爬蟲(chóng)去重復(fù)可以利用

db.test.ensureIndex({name:1},{'unique':true})

“MongoDB數(shù)據(jù)庫(kù)常用表達(dá)式有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI