Для подсчета комментариев от каждого автора вы хотите $group
этого автора и $sum
вхождений. В основном просто операция «$ sum: 1». Но похоже, что у вас есть «комментарии» в виде массива, основанные на ваших собственных комментариях и закрывающей скобке для вашего частичного перечисления данных. Для этого вам необходимо обработать с $unwind
первыми:
db.collection.aggregate([
{ "$unwind": "$comments" },
{ "$group": {
"_id": "$comments.author",
"count": { "$sum": 1 }
}}
])
Это позволит получить общее количество всех комментариев автора автора для всей коллекции. Если бы вы были только после получения полных комментариев по автору за каждый документ (или то, что выглядит как блог после модели), то вы используете документ _id
в рамках группового заявления:
db.collection.aggregate([
{ "$unwind": "$comments" },
{ "$group": {
"_id": {
"_id": "$_id"
"author": "$comments.author"
},
"count": { "$sum": 1 }
}}
])
И если вы потом хотите резюме от автора рассчитывает за один документ с помощью всего одного документа, возвращенного со всеми авторами в массиве, а затем использовать $addToSet
здесь, с другой стадии $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"
}
}
}}
])
Но на самом деле, ценности автор уже уникален и «наборы "не заказываются каким-либо образом, поэтому вы можете изменить это, используя $push
после первого введения $sort
иметь список упорядочивается по количеству сделанных замечаний:
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"
}
}
}}
])
Не могли бы вы включить код, который вы использовали? Кроме того, это из вашего университетского задания mongodb? –
Вы говорите «выполните команду sum» - такой команды нет. Вы говорите о $ group stage, где вы можете использовать оператор $ sum для получения ответа (пока вы группируете в нужном поле). –
Мой код: var group = {$ group: {_ id: "$ author", total: {$ addToSet: "$ comments.author"}}}: –