MongoDB数据类型
2012-10-08 14:54
309 查看
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"
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"
相关文章推荐
- MongoDB支持的java数据类型和测试例子
- Symfony中Doctrine对应的Mongodb数据类型 data type
- MongoDB 数据类型
- MongoDB 基础java数据类型
- MongoDB入门教程三[数据类型]
- mongodb中数据类型的坑
- MongoDB学习02: 数据类型
- 学习MongoDB--(2-3):MongoDB入门(数据类型)
- MongoDB 基本数据类型
- MongoDB入门学习(二):MongoDB的基本概念和数据类型
- MongoDB的数据类型
- MongoDB数据类型
- MongoDB学习(二):数据类型和基本概念
- mongodb 数据类型
- MongoDB学习系列10:mongodb的数据类型
- MongoDB数据类型
- Mongodb 数据类型及Mongoose常用CURD
- 《MongoDB权威指南》学习整理----MongoDB中的基本数据类型
- mongodb数据类型对比
- MongoDB数据类型查询与修改