Сохранение документа в MongoDB без добавления предыдущих частичных обновлений во вложенный документ - PullRequest
3 голосов
/ 21 ноября 2011

Предположим, у меня есть модель, подобная этой:

public class Item
{
    public Guid Id { get;set;}
    public string Title { get;set;}
    public List<Comment> Comments { get;set;}
}

При сохранении в Mongo с использованием официального драйвера комментарии заканчиваются как встроенный поддокумент.Я не хочу, чтобы кто-то добавил комментарий, требующий сохранения всего документа, поэтому я написал атомарный метод частичного обновления:

public void AddComment(Item item, Comment comment)
{           
    Collection.Update(
        Query.EQ("_id", item.Id), 
        Update.AddToSet("Comments", 
        BsonValue.Create(comment)));
}

Однако я не уверен, как указать драйверу Mongo, что «Комментарии"поддерживается с помощью этих обновлений на месте, и его не следует сохранять при вызове Save () для родительского документа.

Есть ли атрибут, которым я мог бы украсить свойство?Или я буду вынужден написать метод обновления, в котором будут указаны все свойства, которые я хочу обновить вручную.

1 Ответ

1 голос
/ 21 ноября 2011

Вы можете указать ShouldSerializeXyz метод в вашем классе элементов следующим образом:

public bool ShouldSerializeComments() {
    return false;
} 

Тогда драйвер никогда не будет сериализовать комментарии, когда вы сохраните объект.

Или другой вариант - установить нулевые комментарии перед сохранением и использовать BsonIgnoreIfNull attribute

public class Item
{
    ...
    [BsonIgnoreIfNull]
    public List<Comment> Comments { get;set;}
}

...

obj.Comments = null;
collection.Save(obj);
...