純前端一枚,之前沒有接觸后臺數據庫,現在學習mongodb數據庫,遇到這樣的一個情景,建立一個博客的數據庫,有這樣一個包含所有文章信息的集合,數據偽造如下:{ "id" : 1, "name" : "one", "tags" : [ "a", "c", "e" ] }
{ "id" : 2, "name" : "two", "tags" : [ "e" ] }
{ "id" : 3, "name" : "three", "tags" : [ "d", "e" ] }
{ "id" : 4, "name" : "four", "tags" : [ "g", "c", "e", "h" ] }
{ "id" : 5, "name" : "five", "tags" : [ "a", "c", "d" ] }tags 表示這篇文章所屬的標簽類型,現在想要查詢出有多少個不同的標簽類型,每個標簽下有多少條數據,這個該怎么實現?目前想到的是用 aggregate 中的 $unwind 將 tags 進行拆分,然后再用 $group 進行分組統計,但是具體代碼該怎么寫,或者是有其他更有效的方式,請指教!??!
2 回答

ITMISS
TA貢獻1871條經驗 獲得超8個贊
這是個很經典的統計問題,其實已經不是MongoDB特有的范疇了,對于其他數據庫來講也是通用的。
你想的辦法本身是沒有問題的,肯定可以通過aggregation的$unwind
+$group
得到你想要的結果。問題在于隨著時間推移,參與統計的博客數量將會越來越多,意味著你的統計語句將越來越慢。問題的關鍵在于如何限制住每次參與統計的記錄數。
從另一個角度講,博客一般寫完就很少有改動了,今天統計昨天的所有博客各屬于哪些標簽,跟明天再來統計昨天的得到的結果應該是一樣的(假設沒有修改的前提下)。所以每次都進行統計其實是浪費。
基于以上這些考慮,你其實可以每隔一段時間(比如每天)統計一次每個標簽都有多少次出現,把它們存起來,在需要時再把這些已經聚合過一次的數據再次聚合。這種方式稱為預聚合。
大概的方向是這樣,細節的問題你可以先自己思考一下。
- 2 回答
- 0 關注
- 993 瀏覽
添加回答
舉報
0/150
提交
取消