mongodb - 关于mongoose关联表统计查询的需求
为情所困
为情所困 2017-05-02 09:24:37
0
2
996

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

为情所困
为情所困

répondre à tous(2)
PHPzhong

Résolu, une requête d'agrégation est nécessaire. Décomposer avant l'agrégation, puis agréger. Le code spécifique est que la requête d'agrégation elle-même peut interroger les exigences, mais les exigences sont des relations de données plusieurs-à-plusieurs, pas un-à-. plusieurs, ils doivent donc d'abord être décomposés en une seule relation

Extraits de code associés
Documents de référence associés

// 查询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);
    })
  };
習慣沉默

Il existe une fonctionnalité très utile appelée Population in mangouste, je vous suggère de la consulter

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!