关于mongodb,有几个大的特点:

1,用mongo shell的话,它的语法类似于Linux中的命令

2,mongodb中的函数参数,返回结果基本上用 JSON表示,所以要用JSON的思维来学习mongodb

============关于引用

Mongodb不支持Join操作,代替的方式是引用,

===方式一,手工引用,如下:

就是一个document中的字段值为另一个document的_id,例子:

original_id=ObjectId() 
 
 
 

   db.places.insert( 
 
 
 

   { 
 
 
 

   "_id":original_id, 
 
 
 

   "name":"H.K", 
 
 
 

   "url":"aa.bb.cc.aspx" 
 
 
 

   } 
 
 
 

   ) 
 
 
 

   db.people.insert( 
 
 
 

   { 
 
 
 

   "name":"jonh", 
 
 
 

   "place_id":original_id, 
 
 
 

   "url":"aa.bb.cc.aspx/test" 
 
 
 

   } 
 
 
 

   )

===方式二:DBRef引用,方式如下:

{$ref::<value>,$id::<value>,$db:<value>}

其中:

$ref 是引用的collection的名字

$id 是引用的document的_id

$db 是引用的数据名

==================ObjectId

12自己的BSON类型,组成如下:

4 byte timestamp; 3 byte machine identifier; 2 byte process id, 3 byte counter.

mongodb默认用它做主键,好处如下:

1)能得到这个_id的创建时间,通过getTimestamp()方法可以得到

2)通过_id和创建时间排序的效果一样。

===ObjectId()

这个 mongo shell 提供的包装类,它能产生一个新的ObjectId,属性和方法如下:

1 str 该_id的值,不过是用16进制字符串表示的。

2 getTimestamp() 返回ObjectId() 对象的创建时间,返回类型是Date

3 toString() [V2.2及以后] ObjectId对象的字符串表示,格式如下: ObjectId(...)

4 valueOf() [V2.2及以后] 和str属性的值相同

打开命令行工具,连接到mongodb,然后输入如下命令:

x=ObjectId() 显示结果如下:

==返回ObjectId()的时间戳,如下:

==返回ObjectId()的字符串,如下:

==返回ObjectId()的值,如下:

==========Capped Collection

可覆盖的Collection:超过指定的空间大小后会覆盖最开始的数据,周而复始。

它的特定:1)插入的顺序就是它在磁盘上的顺序。2)更新时如果让document变大了,那么会更新失败。

3)不能删除Capped Document的数据,如果要删除所有数据,可以使用 emptycapped 命令

比较适合:1,可循环的日志,比如规定500M大小的日志,超过500M后会删除最开始的日志,用现在的日志去记录。

2,Cache,不说了,你懂的。

===创建 Capped Collection

必须显式使用命令 createCollection()来创建;在创建时必须指定一个固定大小(以字节为单位),例子:

db.createCollection("mycoll",{capped:true,size:10000})

==查询命令:

db.cappedCollection.find().sort($natural:-1) //表示按照插入顺序的反序排列结果(默认按查询顺序排列结果)

==检查一个collection是否是capped的:

db.collection.isCapped()

==将一个collection转为capped的:

db.runCommand({"convertToCapped":"mycoll",size:10000})