您的位置:首页 > 数据库 > Mongodb

MongoDB数据类型

2013-01-19 21:41 489 查看
from:/article/8387472.html

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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: