首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Mongodb基本知识和常用语法(1)

Mongodb基本知识和常用语法(1)

数据结构:

简单的说:   1. 文档(document)是MongoDB中最基本的数据组织形式,每个文档以Key-Value(键-值对)的方式组织起来

                        例如:

          {"greeting" : "Hello World!"}

                       2. 一个文档可以有多个Key-Value组合,每个Value可以是不同的类型,比如String、Integer、List等等

                      例如:

              1.{ "name" : "huangz",   
              2.   "sex" : "male",   
              3.   "age" : 20 }

                       3.将多个文档组织起来,就形成了集合(collection)。如果将文档比作关系数据库中的行(row)的话,那么集合就是数据库中的表(table)。

在关系数据库(如MySQL)中,在同一个数据库表里面,总是有相同的行(row),比如你有一个student表,里面有id,name,age,class,grade几个row,那么整个student只能有相同的几个行。



但是在MongoDB当中,内容格式可以很随意,在一个集合中,储存多个有不同Key、不同类型的文档,比如你可以在一个student集合里面,有如下格式的文档:

在这个student集合里面,并不要求每个文档都要有同样的Key和同样的类型,一切随意。

    1.{   
    2.    "name" : "huangz",   
    3.    "age" : 20,   
    4.    "sex" : "male"  
    5.}   
    6.  
    7.{     
    8.    "name" : "jack",   
    9.    "class" : 3,   
    10.    "grade" : 3   
    11.}  


总结起来,MongoDB组织数据的方式如下:

Key-Value对 > 文档 > 集合 > 数据库

另外,在MongoDB中(不包括GridFS),单个文档大小不得超过4mb(版本>=1.7则是16MB)。





                    Key的遵循以下规则:

    "\0"不能使用
    带有"."号,"_"号和"$"号前缀的Key被保留
    大小写有区别,Age不同于age
    同一个文档不能有相同的Key
    除了上面几条规则外,其他所有UTF-8字符都可以使用

集合的命名规则和文档的命名规则大概相似,另外要记住的是

    system集合是被保留的

另外,“.”号的使用在集合当中是允许的,它们被成为子集合(Subcollection);比如你有一个blog集合,你可以使用blog.title,blog.content或者blog.author来帮组你更好地组织集合。



将多个集合组织起来,就形成了数据库(database)。单个MongoDB实例可以使用多个数据库,每个数据库都是独立运作的,可以有单独的权限,每个数据库的数据被分开保存在不同的文件里。



数据库也有命名规则:

    不能使用空字符""或者空格" "、点号"."、美元符"$"、斜线"/"、反斜线"\"和"\0"
    只能用小写
    必须少于64个字节(byte)


数据类型:

    1./* 空值 null */  
    2.  
    3.{ "name" : null }   
    4.  
    5./* 布尔值 boolean */  
    6.  
    7.{ "flag" : true }   
    8.  
    9./* 数值  
    10.    包括32bit、64bit整数integer类型和64bit浮点floating point类型 */  
    11.  
    12.{   
    13.  "copies" : 300,   
    14.  "price" : 60.8   
    15.}   
    16.  
    17./* 字符串 string */  
    18.  
    19.{ "dbname" : "MongoDB" }   
    20.  
    21./* 日期 date */  
    22.  
    23.{ "post_time" : new Date() }   
    24.  
    25./* 正则表达式 regular expression */  
    26.  
    27.{ "name_match" : /huangz/i }   
    28.  
    29./* 数组类型 array */  
    30.  
    31.{ "tags" : ["mongodb", "nosql"] }   
    32.  
    33./* 嵌套文档 embedded document   
    34.    一个文档里面Key的值可以是另外一个文档 */  
    35.  
    36.{   
    37.  "name" : "huangz",   
    38.  "phone" : { "home" : 123321,   
    39.                     "mobile" :  15820123123}   
    40.}   
    41.  
    42./* id  
    43.    每个MongoDB文档都必须有一个叫作"_id"的Key, 同一集合里面的文档_id必须各不相同。  
    44.    id可以在创建文档的时候指定,可以是任何类型,无指定时,默认使用ObjectId对象,自动生成不同的id。  
    45.
    46.    ObjectId对象生成id(12位)的规则如下:  
    47.        0-3 : Timestamp,时间撮  
    48.        4-6  :  Machine,机器代码  
    49.        7-8  :  PID,MongoDB的程序id  
    50.        9-11:  Increment,一个自增量  
    51.*/  
    52.  
    53.{ "_id" : ObjectId("4da025ac5149e6d915098c59"), "name" : "huangz", "phone" : { "home" : 33123123, "mobile" : 15820123123 } }
返回列表