您好,登錄后才能下訂單哦!
本篇內(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í)用文章!
免責(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)容。