recherche

Maison  >  Questions et réponses  >  le corps du texte

mongodb - Exigences pour les requêtes statistiques des tables liées à la mangouste

Je veux poser une question sur mongodb (mangouste).
Un blog a deux tables, articles et balises, une relation plusieurs-à-plusieurs
Le champ de balise dans la table article est un tableau, qui stocke les balises.id, lors de l'interrogation des articles, les données de chaque balise peuvent être associées
La demande actuelle est :
Bag de requête. Lorsque vous faites une liste, vous devez connaître en même temps le nombre d'articles dans lesquels chaque balise est incluse, c'est-à-dire compter
En plus de parcourir et d'établir manuellement le champ de comptage et de recompter lors de l'ajout, de la suppression ou de la suppression. modification du champ de comptage
Existe-t-il un meilleur moyen d'y parvenir via la méthode API mongoose, merci à tous !

为情所困为情所困2788 Il y a quelques jours1062

répondre à tous(2)je répondrai

  • PHPz

    PHPz2017-05-02 09:26:37

    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);
        })
      };

    répondre
    0
  • 習慣沉默

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

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

    .

    répondre
    0
  • Annulerrépondre