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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

MongoDB 聚合

發(fā)布時(shí)間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB 聚合 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聚合操作過(guò)程中的數(shù)據(jù)記錄和計(jì)算結(jié)果返回。聚合操作分組值從多個(gè)文檔,并可以執(zhí)行各種操作,分組數(shù)據(jù)返回單個(gè)結(jié)果。在SQL COUNT(*)和group by 相當(dāng)于MongoDB的聚集。

aggregate() 方法

對(duì)于在MongoDB中聚集,應(yīng)該使用aggregate()方法。?

語(yǔ)法:

aggregate()?方法的基本語(yǔ)法如下

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

例子:

在集合中,有以下的數(shù)據(jù):

{_id:ObjectId(7df78ad8902c)title:'MongoDB Overview', description:'MongoDB is no sql database',by_user:'yiibai point',url:'http://www.yiibai.com',tags:['mongodb','database','NoSQL'],likes:100},{_id:ObjectId(7df78ad8902d)title:'NoSQL Overview', description:'No sql database is very fast',by_user:'yiibai point',url:'http://www.yiibai.com',tags:['mongodb','database','NoSQL'],likes:10},{_id:ObjectId(7df78ad8902e)title:'Neo4j Overview', description:'Neo4j is no sql database',by_user:'Neo4j',url:'http://www.neo4j.com',tags:['neo4j','database','NoSQL'],likes:750},

現(xiàn)在從上面的集合,如果想顯示一個(gè)列表,有很多用戶寫的教程,那么使用?aggregate()?方法,如下所示:

> db.mycol.aggregate([{$group :{_id :"$by_user", num_tutorial :{$sum :1}}}]){"result":[{"_id":"yiibai point","num_tutorial":2},{"_id":"yiibai point","num_tutorial":1}],"ok":1}>

上述使用的情況相當(dāng)于SQL查詢?select by_user, count(*) from mycol group by by_user

在上面的例子中,我們已分組字段 by_user 文檔,并在每個(gè)的次數(shù)by_user先前的值總和遞增。沒有聚集表達(dá)式列表。?

表達(dá)式描述實(shí)例
$sum總結(jié)從集合中的所有文件所定義的值.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg從所有文檔集合中所有給定值計(jì)算的平均.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min獲取集合中的所有文件中的相應(yīng)值最小.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max獲取集合中的所有文件中的相應(yīng)值的最大.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push值插入到一個(gè)數(shù)組生成文檔中.db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet值插入到一個(gè)數(shù)組中所得到的文檔,但不會(huì)創(chuàng)建重復(fù).db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first根據(jù)分組從源文檔中獲取的第一個(gè)文檔。通常情況下,這才有意義,連同以前的一些應(yīng)用?“$sort”-stage.db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last根據(jù)分組從源文檔中獲取最后的文檔。通常,這才有意義,連同以前的一些應(yīng)用 “$sort”-stage.db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道概念

在UNIX?命令?shell?管道是指一些輸入和輸出作為輸入下一個(gè)命令等執(zhí)行操作的可能性。 MongoDB 聚合框架也支持同樣的概念。有一組可能的階段,每個(gè)這些的一組文檔作為輸入,并產(chǎn)生一個(gè)結(jié)果集的文件(或最終生成的JSON文檔在管道末端)。然后又再次被用來(lái)為下一階段等。?

可能的階段聚合框架如下:

  • $project:?用于選擇從收集的一些具體字段。
  • $match:?這是一個(gè)濾波操作,因此可以減少量,作為下一階段的輸入給定的文檔。
  • $group:?如上所討論的,這不實(shí)際的聚合。
  • $sort:?文件排序。
  • $skip:?與此有可能向前跳過(guò)的文件列表中的一個(gè)給定的的文檔數(shù)量。
  • $limit:?這限制了的文檔數(shù)量看一下由從當(dāng)前位置開始的給定數(shù)
  • $unwind:?這是用來(lái)平倉(cāng)文檔的中使用數(shù)組。使用數(shù)組時(shí),數(shù)據(jù)是一種pre-joinded,再次有個(gè)別文件,此操作將被取消。因此,這個(gè)階段,數(shù)量會(huì)增加文件的下一階段。

總結(jié)

以上是生活随笔為你收集整理的MongoDB 聚合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。