您好,登錄后才能下訂單哦!
本篇內容介紹了“MongoDB數據庫常用表達式有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
聚合(aggregate)
簡單來說就是將上一次處理的結果交給下一個處理,最后一個處理完輸出
我們將每一次的處理叫做管道。
常用管道有:
$group:分組,用于統計結果
$match:用于過濾數據
$project:修改結構,重命名,增加,刪除字段,創建計算結果等
$sort:排序
$limit:顯示的文檔數(顯示幾行數據)
$skip:跳過前多少數量的文檔
$unwind:將數據類型字段拆分
常用表達式
$sum:求和
$avg:平均值
$min:獲取最小值
$max:獲取最大值
$push:插入一個數組
$first:獲取第一個文檔數據
$last:獲取最后一個文檔數據
實例:
# 按照性別分組,并計算有多少人
db.stu.aggregate(
{$group:{_id:"$sex",count:{$sum:1}}}
)
輸出:
{ "_id" : "女", "count" : 3 }
{ "_id" : "男", "count" : 3 }
# _id是指定用什么字段分組,需要寫成$sex, $sum:1表示此行數據計算為1
# 在上面的基礎上計算不同性別的平均值
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 }
# 不進行分組,求所有人的數量和年齡平均值
db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},svg_age:{$avg:'$age'}}}
)
# 在按照性別分組,并計算有多少人,計算不同性別的平均值只取count值
# 并且對count進行重命名為sum,不現實其他
db.stu.aggregate(
{$group:{_id:'$sex',count:{$sum:1},agv_age:{$avg:'$age'}}},
{$project:{sum:'$count',_id:0}}
)
# _id會默認顯示,需要需要給個0,其他不寫則不顯示。
輸出:
{ "sum" : 3 }
{ "sum" : 3 }
# 在上述例子中過濾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
# 查詢兩條消息
db.stu.aggregate(
{$limit:2}
)
# 跳過前兩條,顯示兩條
db.stu.aggregate(
{$skip:2}
{$limit:2}
)
# $unwind
# 對數組拆分
例如插入一條數據
db.test1.insert({_id:1,size:[111,222,333]})
# 拆分
db.test1.aggregate(
{$unwind:'$size'}
)
會輸出:
{"_id":1,"size":111}
{"_id":1,"size":222}
{"_id":1,"size":333}
索引
# 插入1000條數據,在MongoDB中可以執行js腳本的
# 你可以插入更多的數據看到更好的效果
for(i=0;i<1000;i++){db.test.insert({name:"test"+i,age:i})}
# 查詢一條數據
db.test.find({name:'test888'})
# 查看查詢的時間
db.test.find({name:'test888'}).explain('executionStats')
找到executionTimeMillis,后面就是查詢的時間單位是毫秒
# 建立索引
db.test.ensureIndex({name:1})
# 再次執行
db.test.find({name:'test888'}).explain('executionStats')
查看時間,對比沒有建立索引時候的時間,差距是很大的。
# 查看當前集合的索引
db.test.getIndexes()
# 刪除索引
db.test.dropIndex()
例如:db.test.dropIndex({name:1})
# 建立索引如果不想有重復的值可以指定唯一性
# 爬蟲去重復可以利用
db.test.ensureIndex({name:1},{'unique':true})
“MongoDB數據庫常用表達式有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。