你的位置:首页 > 数据库

[数据库]MongoDB学习笔记~MongoDB实体中的值对象


回到目录

注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也是不谋而合的,也是可以理解的,因为它只是对主对象的一种补充说明,自己不存在任何意义,所以要主键也没什么用,呵呵.

看一个MongoDB的值对象contact

  public class Person  {    public Person()    {      Contact = new Test.Contact();      AddList = new List<Test.Address>();      Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString();    }    [BsonId]    [BsonRepresentation(BsonType.ObjectId)]    public string Id { get; set; }    public string Name { get; set; }    public DateTime LastContact { get; set; }    public DateTime Birthday { get; set; }    public int Age { get; set; }    public Address Address { get; set; }    public List<Address> AddList { get; set; }    /// <summary>    /// 值对象    /// </summary>    public Contact Contact { get; set; }  }


  public class Contact  {    public string Address { get; set; }    public string PostCode { get; set; }    public string Email { get; set; }  }

大家看到Contact在Person中就是个值对象,它没有Id,它只是对Person的补充,即,它是一种联系方式的封装,注意,在MongoDB实体中,建立主对象时,一定要为值对象和关系对象赋值,这是必要的,当然赋值后,值对象的值为空,这也是正常的,也是必要的,如果不为它

赋值,那么mongodb是不让你去update的(c# driver是这样的)


更新的结果,只有Email字段有值,其它字段被覆盖,这是正常的

办理歌诗达邮轮旅游签证跟团歌诗达邮轮旅游需要多少钱几月份去歌诗达邮轮旅游最好什么时候去歌诗达邮轮旅游最便宜深圳到皇家加勒比游轮旅游广西阳朔四日三晚旅游攻略 什么时候去陕西旅游最好? 韶关旅游攻略2015 中国有哪些名山大川(一) 清远玄真漂流刺激吗安全吗?玄真漂流攻略? 玄真漂流开放时间?清远玄真漂流几点结束? 广州到清远玄真漂流怎么走?广州到清远玄真峡谷漂流有多远? 清远玄真漂流评价?玄真漂流项目有哪些? 九寨沟珍珠滩瀑布介绍 成都大熊猫基地怎么去 九寨沟诺日朗瀑布 九寨沟锅庄介绍 广州市增城市新塘镇邮政编码? 肇庆盘龙峡景区怎么样?盘龙峡有什么好玩的地方? 广州大学城到沙湾古镇自驾游怎么走? 广州增城新塘有什么地方好玩? DTA114TSATP Datasheet DTA114TSATP Datasheet DTA124GSATP Datasheet DTA124GSATP Datasheet DTA124TSATP Datasheet DTA124TSATP Datasheet 长白山自驾游 长白山自驾游 长白山自驾游 蚂蚁窝旅游 蚂蚁窝旅游 蚂蚁窝旅游 云南墨江旅游 云南墨江旅游 云南墨江旅游