2011-11-20 47 views
3

假設我有一個這樣的模式:保存在MongoDB中的文檔,而不重挫以前的部分更新到子文件

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

當使用官方驅動程序保存到蒙戈,意見將最終成爲一個嵌入子文檔。我不希望有人添加註釋,要求保存整個文件,所以我寫了一個原子的部分更新方法:

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

但是,我不知道如何指定的蒙戈驅動程序,「意見」是使用這些就地更新進行維護,如果在父文檔上調用Save(),則不應該保留。

有沒有可以用來裝飾房產的屬性?或者我會被迫編寫一個更新方法來指定我想手動更新的所有屬性。

+0

你在想BsonIgnore的?如果你把它放在你的評論列表中,它會被MongoDB忽略。 –

+0

@PawBaltzersen:如果你會把BsonIgnore序列化器在序列化/反序列化過程中忽略評論,但他只需要在序列化期間忽略它。 –

回答

1

你可以在你的物品類別指定ShouldSerializeXyz方法是這樣的:

public bool ShouldSerializeComments() { 
    return false; 
} 

然後司機將永遠不會序列化的意見時,你會保存對象。

或者其他選項設置註釋爲null之前保存和使用BsonIgnoreIfNull屬性

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

... 

obj.Comments = null; 
collection.Save(obj); 
相關問題