Das Hauptproblem besteht darin, dass Sie die gesamte Sammlung durchlaufen müssen (in dieser Situation können Sie die Indizes nicht zur Beschleunigung des Prozesses verwenden).
Sie können diesen Code ausprobieren (er hat weniger Betrieb als Ihr):
db.getCollection('User').aggregate([
{
$unwind: "$UserSubscriptions"
},
{
$group: {
_id:"$UserSubscriptions.Subscription.Publication.Code",
users: {$addToSet: "$_id"}
}
},
{
$project: {"PublicationCode": "$_id", "Count": {$size: "$users"}}
}
])