2011-11-20 4 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를 입력하면 serializer는 serialization/deserialization 중에 주석을 무시하지만 직렬화 중에 만 무시해야합니다. –

답변

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); 
관련 문제