У вас обычно есть два варианта: 1. Объединить комментарии в документе публикации или 2. Моделировать публикацию и комментарий как документы.
Если вы агрегируете комментарии, вы должны либо: a) ввести номер редакции в сообщении, что позволит вам определять условия гонки и реализовать обработку оптимистичного параллелизма, либо b) добавлять новые комментарии с модификатором MongoDB - например, что-то вроде
var posts = mongo.GetCollection<Post>();
var crit = new { Id = postId };
var mod = new { Comments = M.Push(new Comment(...)) };
posts.Update(crit, mod, false, false);
Если вы смоделируете публикацию и комментарий как отдельные документы, обработка параллелизма, вероятно, будет проще, но вы потеряете возможность загружать публикацию и ее комментарии одной командой findOne
.
На мой взгляд, (1), безусловно, является наиболее интересным вариантом, поскольку он моделирует сообщение как агрегированный объект, который является именно тем, чем он является, когда вы надеваете очки OO :). Это определенно ориентированный на документы подход, тогда как (2) напоминает плоскую структуру реляционной базы данных.