84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
請教一個關於mongodb(mongoose)的問題,一個博客,有兩張表,文章和tag,多對多關係,文章表內有tag字段是一個數組,存儲著tag的id,查詢文章的時候可以關聯出每一個tag的數據,現在的需求是:查詢tag list的時候,需要同時得到每個tag分別被多少個文章包含著,即count,除了遍歷和手動建立count字段增改時重新統計是否還有更好的透過mongoose api實現的方法,感謝各位大神!
解決了,需要聚合查詢,聚合前先分解,然後聚合,具體程式碼,其實本身聚合查詢可以查詢需求,但是需求是多對多資料關係,而非一對多,所以必須先分解為一對一關係
相關程式碼片段相關參考文件
// 查询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 這個很好用建議去了解一下
解決了,需要聚合查詢,聚合前先分解,然後聚合,具體程式碼,其實本身聚合查詢可以查詢需求,但是需求是多對多資料關係,而非一對多,所以必須先分解為一對一關係
相關程式碼片段
相關參考文件
mongoose 裡面有一個叫 Population 這個很好用建議去了解一下