7.用MongoDB的文档结构描述数据关系
MongoDB 与关系型数据库比较
MongoDB的集合可以看作关系型数据库的表,文档对象可以看作表中的一条记录;
不同点是,关系型数据库表的列是固定的,MongoDB没有这个限制,存入集合的文档中可以嵌套文档;他们最终都可以用类似与Bjson格式进行描述;
Samus驱动支持两种方式访问数据库,基本方式和linq方式
包含子文档的集合操作
有这么一个应用场景,某网站提供会员登录的功能,用户需要注册账号才能享受会员服务,但是注册者可能会因为用户资料表单输入项过大而放弃填写,因此用户信息分为主要资料和详细资料两项,初次注册只需要填写主要资料就行了。我们打算把详细信息设计为子文档存储。
1) linq方式实现
- 新建数据描述类,描述用户信息
/// <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; }
}
- 我们要新建一个用户业务操作类“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()); } }
顶
收藏
关注
评论
作者:王思明
出处:http://www.cnblogs.com/maanshancss/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。所有源码遵循Apache协议,使用必须添加 from maanshancss
出处:http://www.cnblogs.com/maanshancss/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。所有源码遵循Apache协议,使用必须添加 from maanshancss