Comment la somme des valeurs de champ dans les collections de la mangouste

0

La question

const PostSchema = new mongoose.Schema({
  title: {
    type: String,
  },
  text: {
    type: String,
    required: true,
  }
  postedBy: {
    type: mongoose.Schema.ObjectId,
    ref: "User",
  }
  likes: [{
    type: mongoose.Schema.ObjectId,
    ref: "User",
  }, ],
  likeLength: {
    type: Number,
    default: 0
  }
});


let totalLikes = Post.aggregate([{
    $match: {
      postedBy: req.profile._id,
    },
  },
  {
    $group: {
      _id: "$postedBy",
      total_count: {
        $sum: "$likeLength"
      }
    }
  },
])

Je voulais somme likeLength valeurs dans toutes les collections filtrée par postedBy champ et d'avoir un résumé de résultat de type entier. J'ai essayé totalLikes la fonction ci-dessus, mais ne pouvait pas le faire.

javascript mongodb mongoose node.js
2021-11-23 17:31:51
2
0

Peut-être cela peut vous aider

  • faire la chaîne req.profile._id pour ObjectId
  • groupe par null tous sont issus de la même postedBy donc, tous les documents qui sont passés dans le groupe. (groupe de nulle signifie que tous les collection 1 groupe) (votre groupe était ok aussi mais c'est plus simple)
  • annuler l' _id pour obtenir comme résultat [{"total_count" : 20}] par exemple

*avant le test, le test de groupe si $match travaux et documents sont trouvés.

let totalLikes = Post.aggregate([{
    $match: {
      postedBy: mongoose.Types.ObjectId(req.profile._id),
    }
  },
  {
    $group: {
      _id: null,
      total_count: {
        $sum: "$likeLength"
      }
    }
  },
  {"$unset": ["_id"]}
])
2021-11-23 18:51:11

Je vous remercie beaucoup . Je leur ai aussi fait avec cette fonction $groupe: { _id: "$postedBy",sumLikes: {$somme: {$taille: "$aime" }}} Mais comment obtenir ces données , je veux dire entier , et d'envoyer le numéro de client?
jdee

les requêtes renvoie toujours à des tableaux de documents (ou un tableau vide si rien n'est trouvé). Le plus vous pouvez obtenir est-ce [{total_count : 20 }] si vous voulez cela, vous pouvez supprimer le _id avec project ou unset
Takis _

Je vous remercie beaucoup et je suis vraiment désolé pour perdre votre temps, mais je pense que c'est pas mon problème. J'utilise réagir sur le client et quand je reçois ces données à partir du serveur je rencontre avec ce {_pipeline: Array(3), options: {...}} alors, comment puis-je atteindre mon numéro :). Cependant, je doute avoir à poser une nouvelle question pour que, parce que le site web du format.
jdee

les agrégations de retour curseurs, et ils ont beaucoup de méthodes, l'une simple, l'un est toArray() et à partir de là, vous obtenez avec js après. voir la documentation de la mangouste
Takis _

en fait j'utilise ces butget pas de résultat 1) de la console.log(stats?._pipeline?.carte((point)=> ( <p > {item[1]} </p>) et 2) les stats._pipeline[1]
jdee

si vous avez des problèmes avec js, peut-être, poser une nouvelle question , j'utilise java/clojure en général, mais beaucoup de gens peuvent aider à
Takis _

Merci je vais regarder ça et poser une nouvelle question si ne pouvais pas le faire . Merci encore
jdee
0

La solution est la suivante. Avec result[0], le résultat sera un objet avec sumLikes de la propriété.

aggregate([
      {
        $match: {postedBy: req.profile._id}
      },
      {
        $group: {
          _id: null,
          sumLikes: {
            $sum: "$likeLength",
          },
        },
      },
      { $unset: ["_id"] },
    ], function(err, result) {
      if(err){
        console.log(err)
      }else{
        res.json(result[0])
      }})

2021-11-23 18:35:38

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................