MongoDB資料類型

來源:互聯網
上載者:User

from:http://blog.csdn.net/haha_mingg/article/details/8048422


MongoDB除了包含這些string, integer, boolean, double, null, array, and object基本的資料類型外,還包含:date, object id, binary data, regular expression, and code這些附加的資料類型。
1. Timestamp類型

Timestamp類型從1.8版本開始支援,Timestamp有一個特殊的用法:timestamp類型的欄位必須是位於文檔的前兩位.看下面例子: //位於第三個欄位 > db.coll.insert({_id:1,x:2,y:new Timestamp()}); > db.coll.findOne({_id:1}); { "_id" : 1, "x" : 2, "y" : { "t" : 0, "i" : 0 } } //位於第二個欄位 > db.coll.insert({_id:2,y:new Timestamp(),x:2}); > db.coll.findOne({_id:2}); { "_id" : 2, "y" : { "t" : 1306746538000, "i" : 1 }, "x" : 2 }


2. ObjectId類型
     在mongodb中,幾乎每個文檔(除了某些系統的Collection或者某些Capped Collection)都要求有一個主鍵:_id,用來唯一標識他們,通常—它的值就是ObjectId類型。當使用者往文檔中插入一條新記錄的時候,如果沒有指定_id屬性,那麼MongoDB會自動產生一個ObjectId類型的值,儲存為_id的值。 _id的值可以為任何類型,除了數組,在實際應用中,鼓勵使用者自己定義_id值,但是要保證它的唯一性。如下有兩個方案:
2.1 Sequence Numbers:序號
   傳統的資料庫中,通常用一個遞增的序列來提供主鍵,在MongoDB中用ObjectId的來代替,我們可以通過如下的函數來擷取主鍵: function counter(name) { var ret = db.counters.findAndModify({query:{_id:name}, update:{$inc : {next:1}}, "new":true, upsert:true}); return ret.next; } db.users.insert({_id:counter("users"), name:"Sarah C."}) // _id : 1 db.users.insert({_id:counter("users"), name:"Bob D."}) // _id :2
2.2 利用UUID
    如果用UUID來提供主鍵,我們的應用需要自己去產生UUID,考慮到效率,建議把UUID儲存為BSON BinData類型,如果用例中對效率要求不是很高,也可以儲存為字串類型。

3. 資料庫關聯
   在MongoDB中,通常的關聯習慣有兩種,一種是簡單的手動關聯,一種是用DBRef。

3.1簡單的手工關聯 //尋找 

> db.post.save({title:'MongoDB Manual',author:'sam'}); 

> p = db.post.findOne(); { "_id" : ObjectId("4de36b33282677bdc555a83a"), "title" : "MongoDB Manual", "author" : "sam" } //關聯 

> db.authors.findOne({name:p.author}); { "_id" : ObjectId("4de36c14282677bdc555a83b"), "name" : "sam", "age" : 24, "email" : "sanlai_lee@lisanlai.cn" } 3.2利用DBRef關聯

   DBRef關聯文法:

{ $ref : <collname>, $id : <idvalue>[, $db : <dbname>] }

例子:

> x = { name : 'Biology' } { "name" : "Biology" } 

> db.courses.save(x) 

> x { "name" : "Biology", "_id" :

ObjectId("4b0552b0f0da7d1eb6f126a1") } 

> stu = { name : 'Joe', classes : [ new DBRef('courses', x._id) ] } // or we could write: // stu = { name : 'Joe', classes : [ {$ref:'courses',$id:x._id} ] }

> db.students.save(stu) 

> stu { "name" : "Joe", "classes" : [ { "$ref" : "courses", "$id" : ObjectId("4b0552b0f0da7d1eb6f126a1") } ], "_id" : ObjectId("4b0552e4f0da7d1eb6f126a2") } 

> stu.classes[0] { "$ref" : "courses", "$id" : ObjectId("4b0552b0f0da7d1eb6f126a1") } 

> stu.classes[0].fetch() { "_id" : ObjectId("4b0552b0f0da7d1eb6f126a1"), "name" : "Biology"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.