mongodb - 關於mongoose關聯表統計查詢的需求
为情所困
为情所困 2017-05-02 09:24:37
0
2
977

請教一個關於mongodb(mongoose)的問題,
一個博客,有兩張表,文章和tag,多對多關係,
文章表內有tag字段是一個數組,存儲著tag的id,查詢文章的時候可以關聯出每一個tag的數據,
現在的需求是:
查詢tag list的時候,需要同時得到每個tag分別被多少個文章包含著,即count,
除了遍歷和手動建立count字段增改時重新統計
是否還有更好的透過mongoose api實現的方法,感謝各位大神!

为情所困
为情所困

全部回覆 (2)
PHPzhong

解決了,需要聚合查詢,聚合前先分解,然後聚合,具體程式碼,其實本身聚合查詢可以查詢需求,但是需求是多對多資料關係,而非一對多,所以必須先分解為一對一關係

相關程式碼片段
相關參考文件

// 查询article-tag的count聚合数据 const getTagsCount = tags => { let $match = {}; if (!authIsVerified(req)) { $match = { state: 1, public: 1 }; } Article.aggregate([ { $match }, { $unwind : "$tag" }, { $group: { _id: "$tag", num_tutorial: { $sum : 1 }} } ]) .then(counts => { const newTags = tags.docs.map(t => { const finded = counts.find(c => String(c._id) === String(t._id)); t.count = finded ? finded.num_tutorial : 0; return t; }); tags.docs = newTags; querySuccess(tags); }) .catch(err => { querySuccess(tags); }) };
    習慣沉默

    mongoose 裡面有一個叫 Population 這個很好用建議去了解一下

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!