首页 >社区问答列表 >mongodb - 关于mongoose关联表统计查询的需求

mongodb - 关于mongoose关联表统计查询的需求

请教一个关于mongodb(mongoose)的问题,
一个博客,有两张表,文章和tag,多对多关系,
文章表内有tag字段是一个数组,存储着tag的id,查询文章的时候可以关联出每一个tag的数据,
现在的需求是:
查询tag list的时候,需要同时得到每个tag分别被多少个文章包含着,即count,
除了 遍历 和 手动建立count字段增删改时重新统计
是否还有更好的通过mongoose api实现的方法,感谢各位大神!

  • PHPzhong
  • PHPzhong    2017-05-02 09:26:372楼

    解决了,需要聚合查询,聚合前先分解,然后聚合,具体代码,其实本身聚合查询可以查询需求,但是需求是多对多数据关系,而非一对多,所以必须先分解为一对一关系

    相关代码片段
    相关参考文档

    // 查询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添加回复

  • 回复