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

請教一個關於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 這個很好用建議去了解一下

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板