Le principal problème est que vous devez parcourir toute la collection (dans cette situation, vous ne pouvez pas utiliser les index pour accélérer le processus).
Vous pouvez essayer ce code (il a moins d'opération que votre):
db.getCollection('User').aggregate([
{
$unwind: "$UserSubscriptions"
},
{
$group: {
_id:"$UserSubscriptions.Subscription.Publication.Code",
users: {$addToSet: "$_id"}
}
},
{
$project: {"PublicationCode": "$_id", "Count": {$size: "$users"}}
}
])