MongoDB學習筆記(四) 用MongoDB的文檔結構描述資料關係

來源:互聯網
上載者:User
 MongoDB的集合(collection)可以看做關係型資料庫的表,文檔對象(document)可以看做關係型資料庫的一條記錄。但兩者並不完全對等。表的結構是固定的,MongoDB集合并沒有這個約束;另外,存入集合的文檔對象甚至可以嵌入子文檔,或者“子集合”。他們最終都可以用類似於BJSON的格式描述。我們今天就來分析MongoDB這一特性帶來的獨特資料管理方式。我們還是以samus驅動為例來分析,samus驅動支援兩種方式訪問資料庫,基本方式和linq方式,基本方式在上篇以介紹過,linq方式我不想單獨講解應用執行個體,這篇我會用兩種方式來對比介紹。 一、包含子文檔的集合操作

  有這麼一個應用情境,某網站提供會員登入的功能,使用者需要註冊帳號才能享受會員服務,但是註冊者可能會因為使用者資料表單輸入項過大而放棄填寫,因此使用者資訊分為主要資料和詳細資料兩項,初次註冊只需要填寫主要資料就行了。我們打算把詳細資料設計為子文檔儲存。

   1) linq方式實現

  1. 建立資料描述類,描述使用者資訊 view source print ?

01 /// <summary>
02 /// 使用者主要資料
03 /// </summary>
04 public class UserInfo
05 {
06     public string UserId { get; set; }
07     public string UserName { get; set; }
08     public string PassWord { get; set; }
09     public Detail Detail { get; set; }
10 }
11  
12 /// <summary>
13 /// 使用者詳細資料
14 /// </summary>
15 public class Detail
16 {
17     public string Address { get; set; }
18     public int Age { get; set; }
19     public string Email { get; set; }
20 }

  2. 我們要建立一個使用者業務操作類“UserBLL”。這個時候要讓驅動知道UserInfo類描述了“使用者資料”的欄位資訊,在GetMongo()方法實現了配置步驟,UserBLL完整代碼如下: view source print ?

01 public class UserBLL
02 {
03     public string connectionString = "mongodb://localhost";
04     public string databaseName = "myDatabase";
05  
06     private Mongo mongo;
07     private MongoDatabase mongoDatabase;
08  
09     //注意這裡泛型型別為“UserInfo”
10     private MongoCollection<UserInfo> mongoCollection;
11  
12     public UserBLL()
13     {
14         mongo = GetMongo();
15         mongoDatabase = mongo.GetDatabase(databaseName) as MongoDatabase;
16         mongoCollection = mongoDatabase.GetCollection<UserInfo>() as MongoCollection<UserInfo>;
17         mongo.Connect();
18     }
19     ~UserBLL()
20     {
21         mongo.Disconnect();
22     }
23  
24     /// <summary>
25     /// 配置Mongo,將類UserInfo映射到集合
26     /// </summary>
27     private Mongo GetMongo()
28     {
29         var config = new MongoConfigurationBuilder();
30         config.Mapping(mapping =>
31         {
32             mapping.DefaultProfile(profile =>
33             {
34                 profile.SubClassesAre(t => t.IsSubclassOf(typeof(UserInfo)));
35             });
36             mapping.Map<UserInfo>();
37         });
38         config.ConnectionString(connectionString);
39         return new Mongo(config.BuildConfiguration());
40     }
41 }

  3. 接著,在“UserBLL”類中定義一個方法“InsertSomeData()”來插入一些資料: show source view source print ?

01 /// <summary>
02 /// 插入一些資料
03 /// </summary>
04 public void InsertSomeData()
05 {
06     UserInfo userInfo1 = new UserInfo()
07     {
08         UserId = "1001",
09         UserName = "張三",
10         PassWord = "123456"
11     };
12     mongoCollection.Save(userInfo1);
13  
14     UserInfo userInfo2 = new UserInfo()
15     {
16         UserId = "1002",
17         UserName = "李四",
18         PassWord = "123456",
19         Detail = new Detail()
20         {
21             Address = "湖北",
22   &n
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.