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());
        }
    }
posted @ 2020-05-22 16:11  maanshancss  阅读(520)  评论(0编辑  收藏  举报