搜尋

首頁  >  問答  >  主體

mongodb - 關於mongoose關聯表統計查詢的需求

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

为情所困为情所困2757 天前1027

全部回覆(2)我來回復

  • PHPz

    PHPz2017-05-02 09:26:37

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

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

    // 查询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);
        })
      };

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-02 09:26:37

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

    回覆
    0
  • 取消回覆