Avoir des tableaux à l'intérieur de tableaux est presque toujours une mauvaise idée pour un certain nombre de raisons. Je mettrais les campagnes dans une collection dédiée pour qu'elles deviennent des documents de premier niveau.
Cela dit, vous pouvez pousser vers un tableau de messages d'une campagne spécifique via :
db.members.update(
{"user_id" : "{1231mjnD-32JIjn-3213}", "campaigns.campaign_id": 3221},
{$push:{"campaigns.$.messages":{"message_id":4213122, "email":"[email protected]"}}}
)