Posiadanie tablic wewnątrz tablic jest prawie zawsze złym pomysłem z wielu powodów. Kampanie umieściłbym w dedykowanej kolekcji, aby stały się dokumentami najwyższego poziomu.
To powiedziawszy, możesz przesłać do tablicy wiadomości określonej kampanii za pomocą:
db.members.update(
{"user_id" : "{1231mjnD-32JIjn-3213}", "campaigns.campaign_id": 3221},
{$push:{"campaigns.$.messages":{"message_id":4213122, "email":"[email protected]"}}}
)