1. 程式人生 > >MongoDB學習筆記~MongoDB實體中的值物件

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是這樣的)

在對值物件賦值時,我們可以按欄位賦值,也可以按物件去賦值,按物件賦值,它對將原物件覆蓋!

            var e1 = repository1.Find("556e8f2c2683c8105c9e501f");
            e1.Name = "wet";
            e1.Contact.PostCode = "100001";//為欄位賦值
            e1.Contact = new Contact { Email = "[email protected]" };//為實體賦值,原實體被覆蓋
            repository1.Update(e1);

更新的結果,只有Email欄位有值,其它欄位被覆蓋,這是正常的

相關推薦

MongoDB學習筆記~MongoDB實體物件

回到目錄 注意,這裡說的值物件是指在MongoDB實體類中的,並不是DDD中的值物件,不過,兩者也是聯絡,就是它是對類的補充,自己本身沒有存在的價值,而在值物件中,也是不需要有主鍵Id的,這與DDD也是不謀而合的,也是可以理解的,因為它只是對主物件的一種補充說明,自己不存在任何意義,所以要主鍵也沒什麼用,呵

MongoDB學習筆記(三) java如何操作MongoDB

1. mongoDB對Java支援的驅動包 驅動包下載地址:http://repo1.maven.org/maven2/org/mongodb/mongo-java-driver/ mongoDB對Java的相關支援、技術:http://www.mongodb.org/di

MongoDB學習筆記——MongoDB 連線配置

 https://www.cnblogs.com/AlvinLee/p/6062167.html -------------------------------------------------------------------------------- MongoDB Repl

MongoDB學習筆記 MongoDB的插入更新--upsert

轉自:http://www.guoxk.com/node/483 我們在使用MongoDB的update時,如果設定第三個引數為true,會在沒有找到文件的情況下新建一個文件,下面是一個例子 >db.foo.find(){ "_id" : ObjectId("4e9

MongoDB學習筆記~資料結構與實體物件不一致時,它會怎麼樣?

回到目錄 對於MongoDB這個文件型弱型別資料庫,它在操作時有時給我們帶來了一些方便,如當你的mongodb資料表與現有的類實體物件不一致時,會發生一些情況,總結如下 1:mongodb資料表不存在,實體類有,進行獲取資料時,程式不出錯 2:mongodb資料表沒有某些屬性欄位,實體類有,進行獲取

SpringBoot學習筆記(10)-----SpringBoot使用Redis/Mongodb和快取Ehcache快取和redis快取

1. 使用Redis   在使用redis之前,首先要保證安裝或有redis的伺服器,接下就是引入redis依賴。   pom.xml檔案如下 <dependency> <groupId>org.springframework.boot</

Mongodb學習筆記三、使用asp.net在Mongodb儲存和讀取圖片檔案

今天練習瞭如何使用c# driver儲存和讀取圖片。 廢話不多說,直接上程式碼。 一、儲存圖片(檔案應該也一樣): private void SaveImgBJSON(string id, byte[] byteImg) {

MongoDB學習筆記~官方驅動巢狀陣列物件的更新

回到目錄 對於陣列物件mongodb本身是支援的,不過對於陣列的更新,mongodb的Csharp驅動目前只支援一級,即你的物件裡包含陣列,而陣列又包括陣列,這表示兩層,這在更新子陣列時,Csharp驅動是不支援的,今天要說的就是如何讓它支援子陣列的更新,下面是我給出的資料結構 在Mongodb的Cs

MongoDB學習筆記~大叔框架實體更新支援N層巢狀~遞迴遞迴我愛你!

回到目錄 遞迴遞迴我愛你!只要你想做,就一定能成功! 從一到二,從二到三,它是容易的,也是沒什麼可搞的,或者說,它是一種流水線的方式,而從三到十,從十到百,它註定要有一個質的突破,否則,它會把你累死,程式碼寫的讓你自己都覺得想吐!有時,我們是被逼出來的,對於一種功能的實現,我們有時需要有從三到十的態度中,

MongoDB學習筆記~以匿名物件做為查詢引數,方便查詢子物件

回到目錄 對於MongoDB的封裝還在繼續,對於不斷追求簡單的程式設計還在繼續,對於喜歡程式碼的那麼感覺,還在繼續... 當你的mongo資料表裡有子物件時,尤其是列表物件時,使用官方的驅動很是不爽,要記得很多新的物件型別,麻煩,所以,將它進行封裝,讓GetModel支援匿名引數! 表結構可能是這樣

MongoDB學習筆記~自己封裝的Curd操作(查詢集合物件屬性,更新集合物件)

回到目錄 我不得不說,mongodb官方驅動在與.net結合上做的不是很好,不是很理想,所以,我決定對它進行了二次封裝,這是顯得很必然了,每個人都希望使用簡單的物件,而對使用複雜,麻煩,容易出錯的物件盡而遠之,這是正常的,人都是喜歡懶惰的,就像程式設計師,也是一樣,喜歡偷懶,可能說,偷懶是程式設計師進步的一

MongoDB學習筆記~管道的分組實現group+distinct

回到目錄 mongoDB的管道是個好東西,它可以將很多操作批處理實現,即將多個命令放入一個管道,然後去順序的執行它們,今天我要說的是,利用管道中的分組來實現實現中的ditinct+group的效果,即先對一個元素去重,然後即一個欄位進行分組,如你的userinfoID,它對應多個planID,而我們在pla

Mongodb 學習筆記 (7)通過純mongo語句,將資料庫的秒級時間戳,轉換成Date型別,並且裝換成任意時間格式

背景:在公司專案中,我們使用了秒級時間戳,作為時間資訊。但是mongodb自支援的多種時間處理函式,只針對date型別的欄位,於是我嘗試使用了mongo語句,將整型數的時間戳,通過mongo語句,轉換成date型別。 這裡使用的是aggregate(聚合),如下: db.t_merchant

mongoDB學習筆記(一)

介紹 tle 狀態 負載 tutorial dir 基於 管理 集合 說明: MongoDB由databases組成,database由collections組成,collection由documents組成,document由fileds組成。MongoDB是異步寫數據

MongoDB學習筆記(二)

.get 條件過濾 條件 $set system.in ins version tle 不存在 一、Mongodb命令 說明:Mongodb命令是區分大小寫的,使用的命名規則是駝峰命名法。 對於database和collection無需主動創建,在插入數據時,如果dat

MongoDB學習筆記—常用命令

upd 鍵值 操作 false doc cer 查看 數據庫 創建 這裏記錄一下MongoDB常用的命令 數據庫相關 創建數據庫 use DATABASE_NAME 如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。 刪除數據庫:切換到要刪除的數據庫下,執行

MongoDB 學習筆記之 權限管理基礎

顯示 命令 修改 技術 sky 需要 bad 官方 改密碼 權限管理基礎 MongoDB有很多用戶roles,這裏只是簡單列舉下命令的使用,具體的role的含義,請查閱官方文檔。 https://docs.mongodb.com/manual/reference/bui

MongoDB 學習筆記之 分片和副本集混合運用

comment ssm table mmap insert ise class 學習 urn 分片和副本集混合運用: 基本架構圖: 搭建詳細配置: 3個shard + 3個replicat set + 3個configserver + 3個Mongos sh

MongoDB 學習筆記之 手動預先分片

var http strong str 可見 mongod 手動 ++ 1-1 手動預先分片: 目的:手動預先分片是為了防止未來chunk的移動,減少IO。 sh.shardCollection("shop.users",{"userId": 1 }) for(v

mongodb 學習筆記

mongodb1. 登陸MongoDB下面這個命令用於登錄MongoDB數據庫。請確保在數據庫dbname中存在對應用戶的憑據(比如,用戶名和密碼)。mongo -u <username> -p <password> --authenticationDatabase <dbnam