zoukankan      html  css  js  c++  java
  • 7.用MongoDB的文档结构描述数据关系

    MongoDB 与关系型数据库比较

    MongoDB的集合可以看作关系型数据库的表,文档对象可以看作表中的一条记录;
    不同点是,关系型数据库表的列是固定的,MongoDB没有这个限制,存入集合的文档中可以嵌套文档;他们最终都可以用类似与Bjson格式进行描述;

    Samus驱动支持两种方式访问数据库,基本方式和linq方式

    包含子文档的集合操作

    有这么一个应用场景,某网站提供会员登录的功能,用户需要注册账号才能享受会员服务,但是注册者可能会因为用户资料表单输入项过大而放弃填写,因此用户信息分为主要资料和详细资料两项,初次注册只需要填写主要资料就行了。我们打算把详细信息设计为子文档存储。

       1) linq方式实现

    1. 新建数据描述类,描述用户信息
    /// <summary>
    /// 用户主要资料
    /// </summary>
    public class UserInfo
    {
        public string UserId { get; set; }
        public string UserName { get; set; }
        public string PassWord { get; set; }
        public Detail Detail { get; set; }
    }
    
    /// <summary>
    /// 用户详细资料
    /// </summary>
    public class Detail
    {
        public string Address { get; set; }
        public int Age { get; set; }
        public string Email { get; set; }
    }
    
    1. 我们要新建一个用户业务操作类“UserBLL”。这个时候要让驱动知道UserInfo类描述了“用户资料”的字段信息,在GetMongo()方法实现了配置步骤,UserBLL完整代码如下:
      public class UserBLL
      {
          public string connectionString = "mongodb://localhost";
          public string databaseName = "myDatabase";
      
          private Mongo mongo;
          private MongoDatabase mongoDatabase;
      
          //注意这里泛型类型为“UserInfo”
          private MongoCollection<UserInfo> mongoCollection;
      
          public UserBLL()
          {
              mongo = GetMongo();
              mongoDatabase = mongo.GetDatabase(databaseName) as MongoDatabase;
              mongoCollection = mongoDatabase.GetCollection<UserInfo>() as MongoCollection<UserInfo>;
              mongo.Connect();
          }
          ~UserBLL()
          {
              mongo.Disconnect();
          }
      
          /// <summary>
          /// 配置Mongo,将类UserInfo映射到集合
          /// </summary>
          private Mongo GetMongo()
          {
              var config = new MongoConfigurationBuilder();
              config.Mapping(mapping =>
              {
                  mapping.DefaultProfile(profile =>
                  {
                      profile.SubClassesAre(t => t.IsSubclassOf(typeof(UserInfo)));
                  });
                  mapping.Map<UserInfo>();
              });
              config.ConnectionString(connectionString);
              return new Mongo(config.BuildConfiguration());
          }
      }
  • 相关阅读:
    2020-07-21日报博客
    java第十九天
    Java第十八章
    Java第十七天
    Java第十六天
    Java第十五天
    Java第十四天
    Java第十三天
    Pytorch-数据增强
    Pytorch-实现ResNet-18并在Cifar-10数据集上进行验证
  • 原文地址:https://www.cnblogs.com/maanshancss/p/12937819.html
Copyright © 2011-2022 走看看