Pour compter les commentaires de chaque auteur que vous voulez $group
par cet auteur et $sum
les occurrences. Fondamentalement, juste une opération "$ sum: 1". Mais il semble que vous ayez des "commentaires" sous la forme d'un tableau basé sur vos propres commentaires et sur le crochet de clôture de votre liste de données partielle. Pour cela, vous devez traiter avec $unwind
premier:
db.collection.aggregate([
{ "$unwind": "$comments" },
{ "$group": {
"_id": "$comments.author",
"count": { "$sum": 1 }
}}
])
Ce sera obtenir le total de tous les commentaires de l'auteur par l'auteur pour la collection. Si vous étiez juste après avoir reçu les commentaires au total par auteur par document (ou ce qui ressemble à un modèle de blog), vous utilisez le document _id
dans le cadre de la déclaration du groupe:
db.collection.aggregate([
{ "$unwind": "$comments" },
{ "$group": {
"_id": {
"_id": "$_id"
"author": "$comments.author"
},
"count": { "$sum": 1 }
}}
])
Et si vous voulez ensuite le résumé de l'auteur compte par document avec un seul document retourné avec tous les auteurs dans un tableau, puis utilisez $addToSet
d'ici, avec un autre étage de pipeline $group
:
db.collection.aggregate([
{ "$unwind": "$comments" },
{ "$group": {
"_id": {
"_id": "$_id"
"author": "$comments.author"
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": "$_id._id",
"comments": {
"$addToSet": {
"author": "$_id.author",
"count": "$count"
}
}
}}
])
Mais vraiment, les valeurs de l'auteur sont déjà uniques et « ensembles "ne sont pas commandés de quelque façon que ce soit, vous pouvez donc changer ceci en utilisant $push
après la première introduction d'un $sort
d'avoir la liste ordonnée par le nombre de commentaires:
db.collection.aggregate([
{ "$unwind": "$comments" },
{ "$group": {
"_id": {
"_id": "$_id"
"author": "$comments.author"
},
"count": { "$sum": 1 }
}},
{ "$sort": { "_id._id": 1, "count": -1 } },
{ "$group": {
"_id": "$_id._id",
"comments": {
"$push": {
"author": "$_id.author",
"count": "$count"
}
}
}}
])
Pourriez-vous s'il vous plaît inclure le code que vous avez utilisé? Est-ce que c'est aussi votre mission universitaire mongodb? –
Vous dites "exécuter la commande sum" - il n'y a pas une telle commande. Parlez-vous de l'étape $ group où vous pouvez utiliser l'opérateur $ sum pour obtenir votre réponse (à condition que vous vous regroupiez dans le bon champ). –
Mon code est var groupe = {$ groupe: {_ id: "$ auteur", total: {$ addToSet: "$ commentaires.author"}}}: –